【问题标题】:C# mainform showing when subform closesC# 主窗体在子窗体关闭时显示
【发布时间】:2011-07-11 14:38:31
【问题描述】:

我想关闭我的第二个表单并显示我的第一个表单,而不创建新对象。

frmMain Mainfrm = new Mainfrm();
Mainfrm.Show();
this.Close();

在我的主窗体上,程序的某些用户有特殊的编码,通过创建一个新对象将主要在应用程序启动时首次创建 mainfrm 时创建的所有内容都扔掉。

【问题讨论】:

  • 对不起,我认为我们不能这样描述。您能否更清楚地了解您要实现的目标以及到目前为止的目标? “不创建新对象”是什么意思? “扔掉一切”是什么意思?
  • 第二个表单打开时是否关闭Mainfrm?如果没有,它不应该在您的第二个关闭时仍然可用吗?
  • 不,我没有关闭我的主窗体,我只是隐藏它
  • 如果你得到你的答案选择它或更具体地回答你
  • 这是 100% 正确的答案,谢谢,但我的名声很弱,无法投票给答案

标签: c# winforms


【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-30
          • 1970-01-01
          • 1970-01-01
          • 2015-12-01
          • 1970-01-01
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多