系统.InvalidOperationException:不能设置可见性

本文关键字:设置 可见性 不能 InvalidOperationException 系统 | 更新日期: 2023-09-27 18:11:36

我创建了一个只有当你在它外面点击时才能关闭的窗口。这里的代码运行得很好:

 protected override void OnDeactivated(EventArgs e)
 {
     try
     {
         base.OnDeactivated(e);
         Close();
     }
     catch (Exception ex) { Console.WriteLine(ex.ToString()); }
 }

唯一的问题出现在窗口关闭时,例如,对于alt + f4,特别地,使用这个异常:

你不能设置可见度为可见或调用Show, ShowDialog, Close windowstophelper。EnsureHandle或当您关闭窗口时。

我如何确保避免它?实际上,我已经管理的异常与Try/Catch.

系统.InvalidOperationException:不能设置可见性

在窗口的Deactivated事件被引发之前,Closing事件发生(但是,显然,只有当用户故意关闭窗口时,例如按下Alt+F4)。这意味着你可以在窗口的Closing事件处理程序中设置一个标志,表明窗口当前正在关闭,这意味着Close()方法不需要在Deactivated事件处理程序中调用:

    private bool _isClosing;
    protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
        _isClosing = true;
    }
    protected override void OnDeactivated(EventArgs e)
    {
        base.OnDeactivated(e);
        if (!_isClosing)
            Close();
    }