按F5编译项目时,没有错误或警告,但表单不会显示。怎么了?
答案 0 :(得分:1)
每次尝试运行代码时,都会首先创建一个frmMain
实例,默认表单和应用程序启动时显示的实例。
创建此表单时,它会自动实例化Form3
的实例,因为您在此表单的代码文件顶部实例化了一个名为modifyForm
的变量:
Dim modifyForm As New Form3 'modify student
问题在于,当运行时实例化类型为Form3
的对象时,它会被称为,直到它的位置,因为{ {1}}代码文件:
Form3
冲洗,起泡并重复。 您的代码变为无限循环,尝试实例化Dim frmMain As New frmMain
的实例,该实例尝试实例化frmMain
的实例,该实例尝试实例化Form3
的实例,ad nauseum。最终,这会溢出您的可用内存并导致frmMain
。
重要的是要注意所有这一切都发生在甚至显示StackOverflowException
的默认实例之前,因为这些变量在代码中的任何方法之外被声明为。因为计算机永远无法逃脱这种无限循环,所以它永远不会有机会继续前进并实际显示你的表格。
你们一直耐心地阅读的那一刻:
通过删除frmMain
代码文件顶部的frmMain
声明进行修复。无论如何,我不知道那是什么。
编辑:希望我能解决一些关于在表单之间传递值的困惑。在进一步研究您的代码后,我的直觉告诉我,最好的解决方案是重载Form3
的构造函数以接受调用表单({em>现有的 Form3
实例)作为一个论点。这样,您就可以在frmMain
课程中访问frmMain
的所有公开成员。
以下是您在代码中如何执行此操作的草图:
Form3
如您所见,Public Class frmMain
''#The private data field that stores the shared data
Private _mySharedData As String = "This is the data I want to share across forms."
''#A public property to expose your shared data
''#that can be accessed by your Form3 object
Public Property MySharedData As String
Get
Return _mySharedData
End Get
Set(ByVal value As String)
_mySharedData = value
End Set
End Property
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''#Do all of your other stuff here...
''#Create a new instance of Form3, specifying this form as its caller
Dim otherForm As New Form3(Me)
''#Show the new instance of Form3
otherForm.Show()
End Sub
End Class
Public Class Form3
''#The private field that holds the reference to the main form
''#that you want to be able to access data from
Private myMainForm As frmMain
Public Sub New(ByVal callingForm As frmMain)
InitializeComponent()
''#Save the reference to the calling form so you can use it later
myMainForm = callingForm
End Sub
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''#Access anything that you need from the main form
MessageBox.Show(myMainForm.MySharedData)
End Sub
End Class
公开了一个名为frmMain
的公共属性(由相应命名的私有变量支持)。这绝对是你想要的任何,你可以随心所欲地 。
另请注意MySharedData
的构造函数(New
方法)如何接受Form3
的实例作为参数。每当您从frmMain
创建新的Form3
对象时,只需指定frmMain
,即表示您要传递Me
的当前实例。在构造函数方法中,frmMain
存储了对其调用表单的引用,您可以在Form3
的代码中随时使用此引用来访问Form3
公开的公共属性
答案 1 :(得分:0)
在VS2010菜单中,转到Build - > Configuration Manager,您的项目是否启用了“构建”列中的复选框?
如果项目从较旧的Visual Studio版本升级,则可能是它未针对.NET Framework 4.0。在这种情况下,您应该按照here所述进行更改。
答案 2 :(得分:0)
要分析问题,请按F8(或F10,取决于您的默认键盘设置)以进入代码而不是运行应用程序。这将带您进入主窗体初始化的主要方法。