0

クラス プロジェクト用に Visual Basic でハングマン ゲームを作成しています。単語内の適切な位置にある正しい文字を推測すると、文字列を描画する関数を作成しました。私の問題は、新しい推測を行うたびに、古いグラフィックが削除され、新しいグラフィックが追加されることです。描いたグラフィックを保存する方法が必要なのですが、誰か知っていますか?

Dim newCharArray() As Char = wordArray(rndNumber).ToCharArray
For i As Integer = 0 To (wordArray(rndNumber).Length - 1) Step 1
    If TextBox1.Text = newCharArray(i) Then
        correctLetter = newCharArray(i)
        letterPos = i
        Me.Refresh()
    End If
Next

Dim drawFont As New Font("Microsoft YaHei UI", 16)
Dim drawBrush As New SolidBrush(Color.Black)
Dim drawString As [String] = CStr(correctLetter)
Dim drawPoint As New PointF(x:=(x1 + 4) + (letterPos * 40), y:=363)
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint)
4

1 に答える 1

0

問題は、Paintメソッドがコンテンツ全体を毎回最初からペイントする責任があることです。

Paintすべての正しい文字とその位置のリストを維持し、メソッドで毎回それらをすべて描画します。

Bitmapまたは、代わりに各 char を aに描画してから、次のPaintようにメソッドでビットマップを描画することもできます。

Private canvas As Bitmap = New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
...

    Dim newCharArray() As Char = wordArray(rndNumber).ToCharArray
    For i As Integer = 0 To (wordArray(rndNumber).Length - 1) Step 1
        If TextBox1.Text = newCharArray(i) Then
            correctLetter = newCharArray(i)
            letterPos = i
            Me.Refresh()
        End If
    Next
...

Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    Dim drawFont As New Font("Microsoft YaHei UI", 16)
    Dim drawBrush As New SolidBrush(Color.Black)
    Dim drawString As [String] = CStr(correctLetter)
    Dim drawPoint As New PointF(x:=(x1 + 4) + (letterPos * 40), y:=363)

    Using g As Graphics = Graphics.FromImage(Me.canvas)
        g.DrawString(drawString, drawFont, drawBrush, drawPoint)
    End Using

    e.Graphics.DrawImage(Me.canvas, New Point(0, 0))
End Sub
于 2013-10-17T10:51:02.573 に答える