我在C#中使用Windows窗体。
我有一个主窗体,其中包含几个包含toolStripButtons的工具栏。使用包含数据的另一个表单后,主窗体失去焦点并单击toolStripButton不会触发OnClick事件:第一次单击激活主窗体,只有第二次单击实际按下按钮。我需要用户只按一次按钮才能触发Click事件,有关如何操作的任何想法?感谢。
注意:
答案 0 :(得分:7)
您需要做的是创建一个继承ToolStrip
并处理WndProc
的类。这是一种方法。还有其他人。
private class MyToolStrip : ToolStrip
{
private const uint WM_LBUTTONDOWN = 0x201;
private const uint WM_LBUTTONUP = 0x202;
private static bool down = false;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONUP && !down)
{
m.Msg = (int)WM_LBUTTONDOWN;
base.WndProc(ref m);
m.Msg = (int)WM_LBUTTONUP;
}
if (m.Msg == WM_LBUTTONDOWN) down = true;
if (m.Msg == WM_LBUTTONUP) down = false;
base.WndProc(ref m);
}
}
我也见过这个解决方案:
protected override void WndProc(ref Message m)
{
// WM_MOUSEACTIVATE = 0x21
if (m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused)
this.Focus();
base.WndProc(ref m);
}
我在我工作的最后一个地方碰到了这个,我认为我提出的解决方案更像后者,但我无法访问我使用的确切代码。
答案 1 :(得分:-4)
如果你有没有边框的Form,那么这个逻辑适合你内置:)
form.FormBorderStyle = FormBorderStyle.None