如何将图像从Form1分配给Form2

时间:2018-09-17 13:13:43

标签: vb.net image load picturebox

我正在通过按钮将图像deshBoardForm加载到CurrentForm。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    DeveloperHeaderPictureBox.Image = DeshBoard.HeaderPictureBox.Image
End Sub

但是有一个错误:

  

Microsoft.VisualBasic.dll中发生了类型为'System.NullReferenceException'的未处理的异常   附加信息:对象变量或With块变量未设置。

1 个答案:

答案 0 :(得分:0)

在VB.Net中有两种访问表单的方法。不推荐一个。

不建议使用VB.NET中的默认表单实例(有关说明,请参见this answer

' Assuming DeshBoard is the name of the class

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    DeveloperHeaderPictureBox.Image = DeshBoard.HeaderPictureBox.Image
End Sub

图像通过

访问
  • DeshBoard:如果没有实例,请创建一个实例,然后返回
  • HeaderPictureBox:使用实例创建一个新的PictureBox,并返回
  • 图片:可能为Null,返回了(可以)

就没有运行时错误而言,此方法最有可能实际上更安全,因为如果不存在实例,则会为您创建一个实例。但这并不总是您想要的。例如,如果在其他地方使用了显式实例,则不能保证在两个地方都使用相同的实例。

建议不要使用默认的表单实例,而是创建一个显式实例。

Private myDeshBoard As New DeshBoard()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    DeveloperHeaderPictureBox.Image = myDeshBoard.HeaderPictureBox.Image
End Sub

在这种情况下,您将创建一个存在于主窗体内的实例。您可能想在其他地方(例如工厂或单例)创建它,因此可以在任何地方访问同一实例。 (超出此问题的范围)

声明实例时会出现问题,例如:

Private myDeshBoard As DeshBoard() ' notice the missing "New"

然后将永远不会创建该实例,并且访问Null引用的任何属性都将引发您遇到的异常。

图像通过

访问
  • myDeshBoard:如果没有实例,则例外,否则返回
  • HeaderPictureBox:使用实例创建一个新的PictureBox,并返回
  • 图片:可能为Null,返回了(可以)