VB.net图形未绘制到屏幕

VB.net图形未绘制到屏幕,vb.net,Vb.net,我正在制作一个刽子手游戏,我无法在屏幕上画出我的破折号 Public Class Form1 Public lines() As String= IO.File.ReadAllLines("C:\Users\axfonath14\Desktop\words_alpha.txt") Dim thisArray As String() = lines.ToArray Public word As String = thisArray(CInt(Int((thisArray.Length * Rnd

我正在制作一个刽子手游戏,我无法在屏幕上画出我的破折号

Public Class Form1

Public lines() As String= IO.File.ReadAllLines("C:\Users\axfonath14\Desktop\words_alpha.txt")
Dim thisArray As String() = lines.ToArray
Public word As String = thisArray(CInt(Int((thisArray.Length * Rnd()) + 1)))
Public g As Graphics = Me.CreateGraphics()
Public dash As Image = My.Resources.dash 
Public x As Integer = 1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Label1.Text = word
    For Each c As Char In word
        x += 1
        g.DrawImage(dash, 125 + (100 * x), 100)
    Next
    Label2.Text = x
End Sub

End Class

当我运行这段代码时,它会在循环中运行,并将标签更改为字母的数量,但它不会绘制任何内容。

您在表单初始化之前获取图形上下文。调用
InitializeComponent()
方法后,将初始化代码移动到实际构造函数。

在表单初始化之前,您正在抓取图形上下文。调用
InitializeComponent()
方法后,将初始化代码移动到实际构造函数。

永远不要调用
CreateGraphics
。懒惰的人这样做没有在示例和教程中进行解释,但这在实际应用程序中并不合适。始终在要绘制的控件的
Paint
事件处理程序中进行绘制。在您的情况下,完全去掉
g
字段,将绘图代码移动到表单的
Paint
事件处理程序中,并使用它提供的
Graphics
对象:

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    For Each c As Char In word
        x += 1
        e.Graphics.DrawImage(dash, 125 + (100 * x), 100)
    Next
End Sub
这样,每次删除和重新绘制表单时,图形都会恢复,这通常会在
Load
事件处理程序完成后恢复


如果要更改绘制的内容,则需要将适当的数据存储在字段中,然后可以从
Paint
事件处理程序访问这些字段。若要强制重新绘制,请对正在处理其绘制事件的窗体或控件调用
Invalidate

永远不要调用
CreateGraphics
。懒惰的人这样做没有在示例和教程中进行解释,但这在实际应用程序中并不合适。始终在要绘制的控件的
Paint
事件处理程序中进行绘制。在您的情况下,完全去掉
g
字段,将绘图代码移动到表单的
Paint
事件处理程序中,并使用它提供的
Graphics
对象:

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    For Each c As Char In word
        x += 1
        e.Graphics.DrawImage(dash, 125 + (100 * x), 100)
    Next
End Sub
这样,每次删除和重新绘制表单时,图形都会恢复,这通常会在
Load
事件处理程序完成后恢复

如果要更改绘制的内容,则需要将适当的数据存储在字段中,然后可以从
Paint
事件处理程序访问这些字段。要强制重新绘制,请对正在处理其
Paint
事件的窗体或控件调用
Invalidate