C# 主窗体在子窗体关闭时显示
Posted
技术标签:
【中文标题】C# 主窗体在子窗体关闭时显示【英文标题】:C# mainform showing when subform closes 【发布时间】:2011-07-11 14:38:31 【问题描述】:我想关闭我的第二个表单并显示我的第一个表单,而不创建新对象。
frmMain Mainfrm = new Mainfrm();
Mainfrm.Show();
this.Close();
在我的主窗体上,程序的某些用户有特殊的编码,通过创建一个新对象将主要在应用程序启动时首次创建 mainfrm 时创建的所有内容都扔掉。
【问题讨论】:
对不起,我认为我们不能这样描述。您能否更清楚地了解您要实现的目标以及到目前为止的目标? “不创建新对象”是什么意思? “扔掉一切”是什么意思? 第二个表单打开时是否关闭Mainfrm
?如果没有,它不应该在您的第二个关闭时仍然可用吗?
不,我没有关闭我的主窗体,我只是隐藏它
如果你得到你的答案选择它或更具体地回答你
这是 100% 正确的答案,谢谢,但我的名声很弱,无法投票给答案
【参考方案1】:
不要关闭你的主窗体,而是隐藏它。执行this.Hide();
,这样用户就看不到它,并且您的主表单数据将保留。您可以调用this.Show()
再次显示它,而无需创建新实例。
【讨论】:
如果主窗体被隐藏,我将如何调用 this.Show() 方法再次显示主窗体? @Wynand:我假设主窗体是this
,所以你可以随时调用它。 youMainForm.Hide()
将对用户隐藏表单。 yourMainForm.Show()
将再次向用户显示。请注意,调用Hide()
不会关闭或释放应用程序,而只是隐藏它。
@Wynand van Heerden :只是想你可以在 form2 的构造函数中像窗口一样发送 main 的实例,并在关闭 form2 时显示它
Akrem 你能给我一个示例代码吗?【参考方案2】:
您是否考虑过将第二种形式显示为对话框?
从主窗体:
new Form2().ShowDialog();
这会导致主窗体保持打开状态,但用户在关闭第二个窗体之前无法访问它。
【讨论】:
【参考方案3】:在主窗体中
private void button1_Click(object sender, EventArgs e) // to open form2
Form2 frm2 = new Form2(this);
frm2.Show();
this.Hide();
表格2
private mainForm mainForm; //mainForm is the name of the Main form
public Form2(mainForm mainForm)
InitializeComponent();
this.mainForm = mainForm;
private void button1_Click(object sender, EventArgs e)// to close form2 and show main
this.mainForm.Show();
this.Close();
【讨论】:
【参考方案4】:您应该能够以相同的方式实例化另一个 Windows 窗体。使其成为模态或非模态,你应该没问题。您不会丢失其他表单中的信息。
请参阅此处了解MSDN article on Dialog Boxes。
【讨论】:
【参考方案5】:您希望主窗体在第二个打开时隐藏吗?或者只是确保它仍然存在。
在正常的事件过程中,一个表单在另一个表单中创建了一种父子关系,因此当第二个表单关闭时,您应该会自动看到第一个表单。将数据反映在第一个表单中需要取回数据,这可以通过设置事件处理程序来完成。
如果您关闭主窗体,则可以通过将其隐藏,然后在 #2 完成后将其取消隐藏来避免这种情况。
【讨论】:
是的,我只想在第二个表单打开时隐藏它【参考方案6】:如果您使用的是 Visual Studio,它可能会将 Application.Run (new Form1())
放在您的 static void Main()
中。这会导致应用程序在 Form1 关闭时退出(这就是 Form2 不存在的原因。)
当你想结束程序时,你可以使用Application.Run()
(不带参数)并显式调用Application.Exit
。
【讨论】:
以上是关于C# 主窗体在子窗体关闭时显示的主要内容,如果未能解决你的问题,请参考以下文章