【问题标题】:Image won't change in picturebox, vb.net图片不会在图片框中更改,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项目,没有控制台窗口……
  • 你的图片尺寸是多少?

标签: vb.net picturebox


【解决方案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()图片框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 2012-11-21
      • 2014-06-27
      • 2013-07-14
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多