与Visual Basic不同,C#不保留表单引用。你需要自己保留它们。 Form2
只是类型 - 它没有“默认参考”。主要思想不是“每种表单类型都有一个实例,隐藏并根据需要显示” - 它是“表单与其他任何对象一样 - 以与其他对象相同的方式创建和处理它们”。通常的工作流程不是Form1.Hide(); Form2.Show();
- 更像是Application.Run(new MainForm()); ... using (var form = new Form1()) { form.ShowDialog(); }
。这并不意味着VB方法不能用于C# - 它只是意味着你必须自己实现它(或切换到VB.NET)。如果它是有道理的 - 设计已经有一段时间了,所以确保你有一个好的想法,你为什么以这种方式做事,而不仅仅是惯性。
这听起来像你真正的问题是,你试图实现某种向导,或通过多种形式的流。这意味着你应该使用向导,或者改变整个应用程序的构建方式。请致电program.cs
。了解它的功能。当传递给Application.Run
的表单关闭时,整个应用程序关闭。有很多方法可以重写,但我们无法以一般方式真正帮助您 - 我只能告诉您,如果您的应用程序不适合“主窗口+其他窗口”模型,则默认的应用程序设置为不会为你工作。
有人应该对您的两种表格的生命周期负责。我们无法真正地告诉你们 - 可能是其中一种形式,也许是主要形式,它以系列中的两种形式打开模态对话框。我们根本无法分辨 - 这是您需要解决的设计问题。但负责人也将在正确的时间点处理关闭和打开个人表格。
那么,谁持有参考到'Form2'? –
P/Invoke ........ –
看到我的两个表单项目:http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng