2

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

 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();
 }

在这种情况下,如果我打开任何表格,那么以前的表格也照常工作。我希望如果一个表单打开,那么所有其他以前的表单都会关闭或禁用,并且听起来像上一个按钮的单击事件上的哔哔声。

4

3 回答 3

5

您必须使用ShowDialog而不是Show

显示对话框():

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

显示():

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

于 2013-05-02T08:49:04.280 回答
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
    }

在这种情况下 Form2 关闭被调用表单时,它也将关闭 Form1,这样它就不会留在内存中。

   private void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close(); // Closes Form1 and remove this time from Memory
    }
于 2013-05-02T09:19:04.013 回答
1

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

obj.ShowDialog();
 this.close();
于 2013-05-02T08:42:38.780 回答