我有以下代码:
FORM1
public partial class Form1 : Form
{
Dialog dlg;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
dlg = new Dialog();
dlg.Show(this);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (dlg != null && !dlg.IsDisposed)
{
this.RemoveOwnedForm(dlg);
dlg.Dispose();
}
}
}
DIALOG
public partial class Dialog : Form
{
public Dialog()
{
InitializeComponent();
}
private void Dialog_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
Hide();
}
}
我需要在form1的“X”按钮上单击两次才能关闭它。可能有什么问题?
答案 0 :(得分:1)
我现在无法尝试,但在Dialog_FormClosing中你可以添加这个测试
if(this.Owner != null)
{
e.Cancel = true;
Hide();
}
来自RemoveOwnedForm上的MSDN文档:
分配给所有者表单的表单在此之前一直保留 调用RemoveOwnedForm方法。除了删除所拥有的 从拥有表单列表中,此方法还设置所有者表单 为空。
答案 1 :(得分:1)
解决方案:
private void Dialog_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.FormOwnerClosing)
{
e.Cancel = true;
Hide();
}
}
此解决方案在Form1_FormClosing事件中不需要dlg.Dispose()和this.RemoveOwnedForm(dlg)。