4

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

4

3 回答 3

8

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

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 事件

于 2012-12-12T14:58:39.717 回答
0

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

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

;)

于 2012-12-12T09:24:31.423 回答
0

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

于 2012-12-12T10:02:34.907 回答