这个问题在这里已有答案:
我正在通过按钮将图像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中访问表单。一个不推荐。
非推荐的方法是在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
图像通过访问
最有可能的是,这种方法在没有运行时错误方面实际上更安全,因为如果不存在实例,则会为您创建一个实例。但它并不总是你想要的。例如,如果在其他地方使用显式实例,则无法保证在两个位置都使用相同的实例。
建议不要使用默认表单实例,而是创建显式实例。
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引用的任何属性都会引发您遇到的异常。
图像通过访问