0

これが私のコードです

Public Class Form1

Public MyFormObject As Graphics = Me.CreateGraphics
Public objFont = New System.Drawing.Font("arial", 20)
Public a, b As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Randomize()
    For i = 1 To 10
        a = CInt(Int(Rnd() * Me.Width))
        b = CInt(Int(Rnd() * Me.Height))
        MyFormObject.DrawString("text", objFont, System.Drawing.Brushes.Black, a, b)
    Next
End Sub
End Class

ご覧のとおり、文字列「テキスト」をランダムに10回描画するボタンが1つあります。私の問題は、フォームの左上部分、つまり0,0から始まる約260x260の文字列のみを描画することです。それを超えると、文字通りテキストを切り取ります。どうしてこれなの?フォーム全体で機能するべきではありませんか?

4

1 に答える 1

1

サブ内でCreateGraphicsを移動する必要があります。Microsoftのドキュメントから:

CreateGraphicsメソッドを介して取得したGraphicsオブジェクトは、現在のWindowsメッセージが処理された後、通常は保持されません。そのオブジェクトでペイントされたものはすべて、次のWM_PAINTメッセージで消去されるためです。したがって、再利用のためにGraphicsオブジェクトをキャッシュすることはできません

Public Class Form1

    Public objFont = New System.Drawing.Font("arial", 20)
    Public a, b As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim MyFormObject As Graphics = Me.CreateGraphics

        Randomize()
        For i = 1 To 10
            a = CInt(Int(Rnd() * Me.Width))
            b = CInt(Int(Rnd() * Me.Height))
            MyFormObject.DrawString("text", objFont, System.Drawing.Brushes.Black, a, b)
        Next

        MyFormObject.Dispose

    End Sub

End Class
于 2012-10-31T22:59:03.080 に答える