如果第二个表单打开,如何禁用第一个表单?

时间:2013-05-02 08:29:46

标签: c# winforms

我已使用此代码从当前表单中打开一个新表单:

 private void add_Click(object sender, EventArgs e)
 {
      add obj = new add();
      obj.Show();
 }

 private void welcome_FormClosed(object sender, FormClosedEventArgs e)
 {
      Application.Exit();
 }

 private void view_Click(object sender, EventArgs e)
 {
      view obj = new view();
      obj.Show();
 }

 private void update_Click(object sender, EventArgs e)
 {
      update obj = new update();
      obj.Show();
 }

 private void delete_Click(object sender, EventArgs e)
 {
      delete obj = new delete();
      obj.Show();
 }

如果我打开任何表格,那么之前的表格也照常运作。 我希望如果一个表单打开,那么所有其他以前的表单都会被关闭或禁用,听起来像是上一个按钮的点击事件发出的嘟嘟声。

3 个答案:

答案 0 :(得分:4)

您必须使用ShowDialog代替Show

的ShowDialog():

  

打开一个窗口,仅在新打开的窗口关闭时返回。

展():

  

打开一个窗口并返回,而不等待新打开的窗口关闭。

答案 1 :(得分:4)

为什么不尝试隐藏您的表单,然后在被调用的表单关闭时关闭它,以便它不会留在内存中。像这样。

假设您在Form1中单击一个按钮以显示Form2

 Form2 frm2 = new Form2();
 frm2.Activated += new EventHandler(frm2_Activated);
 frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
 frm2.Show();

现在,这个是当Form2显示或被激活时你隐藏了调用表单,在本例中是Form1

    private void frm2_Activated(object sender, EventArgs e)
    {
        this.Hide(); // Hides Form1 but it is till in Memory
    }

当这个案例中,当被调用的表格被封闭时,这个,它也将关闭Form1,以便它不会留在内存中。

   private void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close(); // Closes Form1 and remove this time from Memory
    }

答案 2 :(得分:1)

尝试使用,这将关闭您当前的表格。

obj.ShowDialog();
 this.close();