如何将图像从Form1分配给Form2 [复制]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我正在通过按钮将图像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'的异常附加信息:对象变量或未设置块变量。

vb.net image load picturebox
1个回答
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

图像通过访问

  • DashBoard:如果没有实例,则创建一个,返回
  • 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,返回(这没关系)
© www.soinside.com 2019 - 2024. All rights reserved.