Кстати раз уж такая оказия, что тут отвечают:)
Есть еще одна проблема, возникла при создании нестандартного эл. управления.
Для его создания я использовал стандартные рекомендации - наследовал от System.Windows.Forms.Control. Переопределил метод OnPaint, и дальше использовал ветку System.Drawing
На данном этапе, для тестирования, нарисовал закрашенный прямоугольник с границами.
Следующим этапом надо сделать так что бы в данном прямоугольнике отображался текст. И тут появилась проблема.
Сам текст отобразить не сложно, это делается инструкцией:
Dim grfGraphics As System.Drawing.Graphics
grfGraphics = e.Graphics << Где e - это объект класса System.Windows.Forms.PaintEventArgs, передаваемый в метод OnPaint, используется в моем коде потому что напрямую объект класса Graphics создать нельзя.>>
Dim xCoord As Single
Dim yCoord As Single
Dim bshBrush As System.Drawing.Brush
bshBrush = New System.Drawing.SolidBrush(System.Drawing.Color.Black)
xCoord = <<Какое то значение>>
yCoord = <<Какое то значение>>
grfGraphics.DrawString(Me.Text, Me.Font, bshBrush, xCoord, yCoord)
По ходу дела необходимо реализовать позиционирование текста внутри элемента управления (например MiddleCenter, или остальные восемь стандартных позиций)
Элемент управления может быть произвольных размеров и текст может быть произвольной длинны, однако xCoord и yCoord задают координаты левого, верхнего угла текстового поля.
Соответственно необходимо каким то образом вычислять координаты верхнего левого угла, для каждой позиции, при произвольном размере текстового поля и самого элемента управления.
Сами вычисления для прямоугольного элемента управления довольно просты (в примере вычисляем позицию MiddleCenter) - необходимо от половины ширины элемента управления, отнять половину ширины текстового поля, и это и будет xCoord.
Проведя такую же операцию с высотой получим yCoord.
Размеры элемента управления получить не сложно, они содержатся в
<<CntrName>>.Size.Width
<<CntrName>>.Size.Height
Так же не сложно получить высоту текстового поля, она зависит от размера шрифта и содержится в Me.Font.Height который мы использовали для создания строки
Проблема заключается в получении ширины текстового поля, я хз как это сделать - я могу получить только количество символов строки, но очевидно что не все буквы одинаковы по ширине..
Подскажите плз - как получить ширину строки, или каким еще образом можно реализовать позиционирование текста в элементе управления?