点击聚焦表格上的丢失

时间:2011-02-10 15:07:02

标签: windows winforms focus click

问题: 是否总有一种方法可以通过对表单产生影响来实现单击,使表单处于焦点状态?

背景: 在我的(C#win form)应用程序失焦后,我可以将表格悬停在阴影和边框上,指示我的鼠标位置。

单击例如菜单条目(文件),表单获得焦点,但文件菜单未获得单击。这需要额外点击。

对于表单上的普通按钮,只需单击一次。

2 个答案:

答案 0 :(得分:3)

可以通过在单击发生之前设置焦点来修复此问题。 Se代码:

class ToolStripEx : System.Windows.Forms.ToolStrip
{
    protected override void WndProc(ref Message m)
    {
        // WM_MOUSEACTIVATE = 0x21
        if (m.Msg == 0x21 && this.CanFocus && !this.Focused)
        {
            this.Focus();
        }
        base.WndProc(ref m);
    }
}

此方法也适用于MenuStrip

答案 1 :(得分:1)

我找到了一些有用的文章 - 尤其是Rick Brewster的this one。解决方案在于覆盖ToolStrip(或MenuStrip)的WndProc方法:

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    if (this.clickThrough &&
        m.Msg == NativeConstants.WM_MOUSEACTIVATE &&
        m.Result == (IntPtr)NativeConstants.MA_ACTIVATEANDEAT)
    {
        m.Result = (IntPtr)NativeConstants.MA_ACTIVATE;
    }
}