【问题标题】:Why two time click is required to click ToolStripMenuItem?为什么需要两次单击才能单击 ToolStripMenuItem?
【发布时间】:2012-12-12 09:13:37
【问题描述】:

我有一个正在运行的 winform 应用程序,我在这个应用程序的顶部添加了一个 winform one,它将一些数据传递给应用程序。将数据传递给应用程序后,将启用保存按钮以将数据保存到应用程序。保存按钮是工具条菜单项。我面临的一个问题是当新添加的表单仍然存在时,我需要单击两次才能保存,即第一次单击将无法正确单击。或者,如果我关闭新添加的 winform,然后保存点击将在第一次发生,或者如果我点击现有应用程序的任何部分,即焦点将在那里,那么第一次点击也可以。

【问题讨论】:

    标签: c# .net winforms visual-studio-2010


    【解决方案1】:

    将此方法覆盖添加到包含您的工具条的表单应该会处理它。

    protected override void WndProc(ref Message m)
    {
        const int WM_PARENTNOTIFY = 0x0210;
        if (m.Msg == WM_PARENTNOTIFY)
        {
            if (!Focused)
                Activate();
        }
        base.WndProc(ref m);
    }
    

    工具条只执行激活调用,所以通过自己处理它会执行 Click 事件

    【讨论】:

    • 优秀!这节省了很多挫折。
    【解决方案2】:

    您很好地回答了您自己的问题:新表单在添加时会成为焦点。因此,如何处理这个“按设计”问题取决于您:

    • 在另一个窗体传递数据后将主窗体置于前面;
    • 完全关闭其他表单;
    • 显示描述性消息,以便用户尝试保存知道他们 可以保存;
    • ...
    • 利润!

    ;)

    【讨论】:

    • 我们不能关闭另一个窗体并把主窗体放在前面,我们是根据用户要求做的。我们可以检查一下是否有焦点吗?而那个时候只启用保存按钮
    • 正确答案:Kleinux
    【解决方案3】:

    当您启用保存按钮时,您有时必须在主窗体中执行此操作,请在其上调用 Focus()。这样一来,焦点就回到了主窗体,用户可以一键保存

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多