只是添加一些可用于评估TextRenderer的DrawText()方法和Graphics的DrawString()方法之间的差异的实现细节。
单击表单,两种方法显示它们在测量和渲染文本方面的差异。
Dim sText As String() = New String() {
"C:\FirstLevelDir\FirstSubDir\AnotherDir\ADeepLevelDir\LostDeepDir\SomeFile.exe",
"C:\FirstLevelDir\AnotherFirstSubDir\AnotherGreatDir\AwsomeDeepLevelDir\LostDeepDir\Some.exe",
"C:\FirstLevelDir\SomeFirstSubDir\SomeOtherDir\AnotherDeepLevelDir\VeryLostDeepDir\FinalBuriedDir\SomeFile.exe"
}
在窗体的Click()
事件中,绘制sText
线条,使用 TextRenderer.MeasureText() 测量它们的宽度和高度,并使用TextRenderer.DrawText()打印它们
Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click
Dim relPositionY As Integer = 0
Dim lineSpacing As Single = 0.5
Dim paragraphSpacing As Integer = CInt(Font.Height * lineSpacing)
Dim flags As TextFormatFlags = TextFormatFlags.Top Or
TextFormatFlags.WordBreak Or
TextFormatFlags.TextBoxControl
Using g As Graphics = CreateGraphics()
For x = 0 To sText.Length - 1
Dim textSize As Size = TextRenderer.MeasureText(
g, sText(x), Font,
New Size(ClientSize.Width, ClientSize.Height), flags
)
TextRenderer.DrawText(g, sText(x), Font,
New Rectangle(0, relPositionY, textSize.Width, textSize.Height),
ForeColor, flags)
relPositionY += textSize.Height + paragraphSpacing
Next
End Using
End Sub
在窗体的Paint()
事件中,绘制sText
线条,使用 .Graphics.MeasureString() 测量它们的宽度和高度,并使用.Graphics.DrawString()打印它们
请注意,TextRenderer 中的文本框大小是相对于 Form.ClientSize,而在 Graphics 中是相对于 Form 的完整宽度。
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
Dim relPositionY As Single = 0
Dim lineSpacing As Single = 0.5
Dim paragraphSpacing As Single = CSng(Font.Height) * lineSpacing
Dim flags As StringFormatFlags = StringFormatFlags.LineLimit Or
StringFormatFlags.FitBlackBox
Using format As StringFormat = New StringFormat(flags)
For x = 0 To sText.Length - 1
Dim textSize As SizeF = e.Graphics.MeasureString(sText(x), Font,
New SizeF(CSng(Width), CSng(Height)), format
)
e.Graphics.DrawString(sText(x), Font, Brushes.Black,
New RectangleF(0, relPositionY, textSize.Width, textSize.Height))
relPositionY += textSize.Height + paragraphSpacing
Next
End Using
End Sub