C#如果子窗体失去焦点,则关闭它,但如果应用程序未处于活动状态,则不关闭它

本文关键字:如果 活动状态 应用程序 失去 窗体 焦点 | 更新日期: 2023-09-27 18:28:09

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

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

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

C#如果子窗体失去焦点,则关闭它,但如果应用程序未处于活动状态,则不关闭它

我认为你使用对话框这个词是令人困惑的,因为这通常意味着模态形式

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

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