如何将图像从 Form1 分配到 Form2

How to assign a image From Form1 to Form2

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

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

但是出现错误:

An unhandled exception of type 'System.NullReferenceException' occurred in Microsoft.VisualBasic.dll Additional information: Object variable or With block variable not set.

有两种方法可以访问 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:如果没有实例,创建一个,return
  • HeaderPictureBox:使用实例创建了一个新的 PictureBox,是 returned
  • 图片:可能为 Null,已 returned(这没问题)

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

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

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:如果没有实例,异常,否则return
  • HeaderPictureBox:使用实例创建了一个新的 PictureBox,是 returned
  • 图片:可能为 Null,已 returned(这没问题)