如何从另一个WinForm的代码中关闭不同的WinForm?

时间:2010-05-28 18:53:42

标签: c# winforms

如何从不同的WinForm(A)代码中关闭不同的WinForm(B)?

我已经设置好WinForm(B)在WinForm(A)的代码中打开了:

Form2 form2 = new Form2();
form2.ShowDialog();

3 个答案:

答案 0 :(得分:5)

您需要对代码进行两处更改:

  • 使用Show代替ShowDialog,以便第一个窗口仍然可以处理事件。
  • 保留对您打开的表单的引用。

以下是一些示例代码:

Form2 form2;

private void button1_Click(object sender, EventArgs e)
{
    form2 = new Form2();
    form2.Show();
}

private void button2_Click(object sender, EventArgs e)
{
    form2.Close();
}

您需要添加一些逻辑,以确保在打开表单之前无法关闭表单,并且不要尝试关闭已经关闭的表单。

答案 1 :(得分:0)

ShowDialog将打开form2作为模式对话框,即在form2关闭之前(由用户或某些form2关闭,程序执行将不会继续事件处理程序。似乎你想打开form2无模式,即打电话给Show。然后你应该可以随时拨打form2.Close()

旁注:Show打开的表单会在用户关闭后自动处理。 (另一方面,模态形式,即用ShowDialog()显示的形式,必须手动Dispose d。)也就是说,当您使用form2时,Close可能已被处置。想手动关闭它。我认为在已处理的表单上调用Dispose不会导致任何令人讨厌的事情,我认为它只是第二次调用{{1}}。

答案 2 :(得分:0)

你将“Show”方法应用于Winform,这个方法继续监听Windows消息,如WM_CLOSE。但如果你使用“ShowDialog”,你的winform会变得“聋”。

只需编写form2.show(),你的winform就会做你想做的事: - )