为什么单击ToolStripMenuItem需要两次单击?

时间:2012-12-12 09:13:38

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

  • 在另一个表单通过数据后将主表单置于前面;
  • 完全关闭另一张表格;
  • 显示描述性消息,以便用户尝试保存知道它们 可以保存;
  • ...
  • PROFIT!

;)

答案 2 :(得分:0)

当您启用保存按钮时,您需要在主窗体中进行某些操作,请在其上调用Focus()。这样,焦点就会返回到主窗体,用户可以执行一次单击保存

相关问题