Ama*_*rek 7 c# focus winforms form-control
我在C#中使用Windows窗体.
我有一个主窗体,其中包含几个包含toolStripButtons的工具栏.使用包含数据的另一个表单后,主窗体失去焦点并单击toolStripButton不会触发OnClick事件:第一次单击激活主窗体,只有第二次单击实际按下按钮.我需要用户只按一次按钮才能触发Click事件,有关如何操作的任何想法?谢谢.
笔记:
你需要做的是创建一个继承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);
}
}
Run Code Online (Sandbox Code Playgroud)
我也见过这个解决方案:
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);
}
Run Code Online (Sandbox Code Playgroud)
我在我工作的最后一个地方碰到了这个,我认为我提出的解决方案更像是后者,但我无法访问我使用的确切代码.
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |