0

我目前正在使用以下代码来估计文本框的大小:

    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”在整个字符集中具有最大的宽度和高度,所以这个人(谁编写了代码)试图猜测所需的最大面积。

4

1 回答 1

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)
于 2012-06-09T04:23:01.923 回答