Form.GotFocus禁用关闭按钮

时间:2015-09-07 09:54:50

标签: c# windows forms winforms

我有一个C#Windows窗体应用程序,它有一个主窗体,在它的构造函数中打开另外两个窗体。我会称他们为侧板。

主窗体处理了GotFocus事件,它为两个侧面板窗体调用Form.BringToFront()。

启用此功能(即处理GotFocus)后,主窗体的关闭按钮将停止工作。

如何检查事件处理程序中是否按下了关闭按钮?

    public Canvas()
    {
        InitializeComponent();

        this.GotFocus += new EventHandler(WindowGotFocus);

        tool.Show();
        pp.Show();
    }

    public void WindowGotFocus(object sender, EventArgs e)
    {
        tool.BringToFront();
        pp.BringToFront();
    }

当我按下主窗体的关闭按钮时,它会获得焦点,调用WindowGotFocus方法,并且应用程序不会关闭。如果我评论'this.GotFocus + = new EventHandler(WindowGotFocus);'在构造函数中,它可以工作。

我需要此功能,以便在使用从其他应用程序切换回应用程序时再次显示侧面板。

1 个答案:

答案 0 :(得分:1)

嗯,当然它不起作用。您导致表单失去焦点,这意味着就窗口而言,点击从未发生过。

处理此问题的正确方法是简单地将工具窗口设为主窗口的子窗口:

var parent = new Form();
var child = new Form();

parent.AddOwnedForm(child);

parent.Show();
child.Show();

这将自动处理您期望的行为 - 毕竟,您期望这种行为,因为其他应用程序执行完全相同的操作 :)除了确保子窗口显示主窗口时,当父窗口关闭时,它还会关闭所有子窗口。