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