用于估计vb.net中测试框大小的内存密集程度较低的方法

时间:2012-06-08 22:54:16

标签: vb.net

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

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

1 个答案:

答案 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)