【问题标题】:Form.GotFocus disables close buttonForm.GotFocus 禁用关闭按钮
【发布时间】:2015-09-07 09:54:49
【问题描述】:

我有一个 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);'在构造函数中,它可以工作。

我需要此功能,以便在用户从另一个应用程序切换回该应用程序时再次显示侧面板。

【问题讨论】:

  • 您需要共享您的代码,因为发生的任何事情都可能是由某处的代码引起的。你能解释一下“停止工作”是什么意思吗?你的意思是你有没有被调用的代码,或者你不能点击它,或者当你点击它时表单没有关闭?
  • 我已经用代码以及要求和行为的详细信息更新了问题。

标签: c# windows forms winforms


【解决方案1】:

好吧,这当然行不通。您导致表单失去焦点,这意味着就窗口而言从未发生过点击。

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

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

parent.AddOwnedForm(child);

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

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

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2019-04-15
    • 2013-09-26
    相关资源
    最近更新 更多