VS 2010 Ultimate VB.NET Project表单将无法编译/显示

时间:2010-11-23 15:15:20

标签: vb.net visual-studio

按F5编译项目时,没有错误或警告,但表单不会显示。怎么了?

3 个答案:

答案 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,取决于您的默认键盘设置)以进入代码而不是运行应用程序。这将带您进入主窗体初始化的主要方法。