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 に答える