我目前正在使用以下代码来估算文本框的大小:
Dim i As Integer, j As Integer, pGr As Graphics, sz As SizeF
For i = 1 To pNumRows
For j = 1 To pWidth
sb.Append("W")
Next
If pNumRows > 1 Then
sb.Append(vbCrLf)
End If
Next
pGr = txtTextBox.CreateGraphics
sz = pGr.MeasureString(sb.ToString, pTextFont, New SizeF(10000, 10000))
pGr.Dispose()
txtTextBox.SetSize(CInt(sz.Width), CInt(sz.Height) + 80)
txtTextBox.Size = New Size(CInt(sz.Width) + 20, CInt(sz.Height) + 100)
我想知道是否有任何方法可以删除for循环并完全取消pGr(textbox.CreateGraphics)方法并仍然正确估计文本框的大小。任何帮助将不胜感激。
如果你想知道为什么我(实际上是编写代码的人)循环遍历所有'W',那是因为(我认为)'W'在整个字符集中具有最大的宽度和高度,所以编写代码的人试图猜测所需的最大面积。
答案 0 :(得分:1)
这会消除你的循环(并在框架中替换它们的循环,希望更快的循环)。不确定性能。
Dim i As Integer, j As Integer, pGr As Graphics, sz As SizeF
sb.Append(new String("W", pWidth))
If pNumRows > 1 Then
sb.Append(new String(vbLf, pWidth)) ' may want to use vbCR instead
End If
pGr = txtTextBox.CreateGraphics
sz = pGr.MeasureString(sb.ToString, pTextFont, New SizeF(10000, 10000))
pGr.Dispose()
txtTextBox.SetSize(CInt(sz.Width), CInt(sz.Height) + 80)
txtTextBox.Size = New Size(CInt(sz.Width) + 20, CInt(sz.Height) + 100)