图片不会在图片框中更改,vb.net
Posted
技术标签:
【中文标题】图片不会在图片框中更改,vb.net【英文标题】:Image won't change in picturebox, vb.net 【发布时间】:2020-12-31 17:14:44 【问题描述】:我正在尝试对其进行编码,以便我可以从类中的方法创建图片框。但是,当我的图片框被绘制时,它不显示任何图像,它只在指定位置显示一个指定尺寸的白色方块。
这是我用来创建图片框的代码:
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)
【问题讨论】:
你的意思可能是Public Sub DrawEnemy(ByVal formInstance as Form)
(或者只是Public Sub DrawEnemy(formInstance as Form)
)
是的...绝对没有理由在这里传递 ByRef,并且您绝对应该指定类型(并且为了上帝的缘故打开 Option Strict!)。请记住:ByVal 仍然传递引用...只是引用本身复制了它的值。
感谢您告诉我有关 byval 的信息,我已修复它。此外,当白框仍然存在时,我注意到当我拖动控制台窗口时,白框突然变成了我想要的图像。这是 vb 的问题还是我的代码有问题?
"当我拖动控制台窗口时" 什么控制台窗口?你是从什么类型的项目开始的?应该是一个WinForms项目,没有控制台窗口……
你的图片尺寸是多少?
【参考方案1】:
请在您的DrawEnemy()
方法中添加以下代码:
enemypic.SizeMode = PictureBoxSizeMode.StretchImage
【讨论】:
【参考方案2】:当我突然拖动控制台窗口时,白框变成了我想要的图像。
啊哈!这意味着代码不会导致重新绘制表单。我们可以通过调用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()
图片框。
【讨论】:
以上是关于图片不会在图片框中更改,vb.net的主要内容,如果未能解决你的问题,请参考以下文章