C#如果失去焦点则关闭子窗体,但如果应用程序未激活则不关闭

时间:2013-08-19 16:06:44

标签: c# winforms dialog

如何在失去活动(焦点)时关闭对话框(窗体),但如果切换到另一个应用程序,桌面等,则不能关闭?

到目前为止,我使用此代码:

private void MyDialog_Deactivate(object sender, EventArgs e) { Close(); }

1 个答案:

答案 0 :(得分:0)

我认为您使用对话框一词令人困惑,因为这通常意味着模态形式。

根据您的描述,我认为您可以根据激活的主表单关闭打开的表单:

protected override void OnActivated(EventArgs e) {
  base.OnActivated(e);

  List<Form> closeForms = new List<Form>();
  foreach (Form f in Application.OpenForms) {
    if (!f.Equals(this)) {
      closeForms.Add(f);
    }
  }

  foreach (Form f in closeForms) {
    f.Dispose();
  }
}