问题描述
我正在尝试对其进行编码,以便可以从类中的方法创建图片框。但是,绘制我的图片框时,它不会显示任何图像,而只会在指定位置显示指定尺寸的白色正方形。
这是我用来创建所述图片框的代码:
Public Sub DrawEnemy(ByRef formInstance)
Dim enemypic As New PictureBox
enemypic.Image = Image.FromFile("C:\fboi1\Enemy.Png")
enemypic.Width = 64
enemypic.Height = 64
enemypic.Location = New Point(Me.EnemyPosX,EnemyPosY)
enemypic.Visible = True
formInstance.Controls.Add(enemypic)
End Sub
这是我从以下位置调用方法的地方:
Dim Enemy1 As New computerControlled(1,1)
Enemy1.DrawEnemy(Me)
解决方法
请在您的DrawEnemy()
方法中添加以下代码:
enemypic.SizeMode = PictureBoxSizeMode.StretchImage
,
当我突然拖动控制台窗口时,白框变成了我想要的图像。
啊哈!这意味着代码不会导致重新绘制表单。我们可以通过调用Invalidate()
函数来触发它。
Public Sub DrawEnemy(formInstance As Form)
Dim enemypic As New PictureBox
enemypic.Image = Image.FromFile("C:\fboi1\Enemy.Png")
enemypic.Width = 64
enemypic.Height = 64
enemypic.Location = New Point(Me.EnemyPosX,EnemyPosY)
enemypic.Visible = True
formInstance.Controls.Add(enemypic)
formInstance.Invalidate()
End Sub
如果您在循环中多次调用此方法,则应在循环后进行处理,在此过程中,您还将阻止重新绘制(以防止闪烁),直到循环结束为止。
form.SuspendLayout()
For Each enemy In ...
'...
DrawEnemy(form)
Next
form.Invalidate()
form.ResumeLayout()
也有可能您只需要Invalidate()
图片框即可。