图片不会在图片框中更改,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的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本框中输入值后单击输入更改图像?

图片验证码怎么填写

如何调整图片kb大小

将变量从一个图片框复制到另一个图片框而不会相互更改

word文档中如何替换图片

用图片框on_click c#切换图片框的图片