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# 主窗体在子窗体关闭时显示的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform主窗体和子窗体之间如何相互操作对方的控件

c#里面如何显示下一个窗体而关闭当前窗体?

在子窗体之前打开主窗体时出错

C#多窗体和菜单工具栏

C# 在子窗体调用父窗体的值(转)

winform问题,close()方法能关闭窗体吗?谢谢 c#