Click lost on focusing form

六眼飞鱼酱① 提交于 2019-11-27 08:14:30

问题


Question: Is there a way to always let a click, that brings a form in to focus, through an have effect on the form?

Background: With my (C# win form) application out of focus I can hover the form and get shades and borders indicating where my mouse is.

Clicking for example a menu entry (File) the form gets focus but the file menu does not get click. This takes an additional click.

For an ordinary button on the form only one click is required.


回答1:


This can be fixed by setting focus before the click occurs. Se code:

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);
    }
}

This approach also works on MenuStrip




回答2:


I found a few helpful articles – especially this one by Rick Brewster. The solution lies in overriding the WndProc method for the ToolStrip (or MenuStrip):

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;
    }
}


来源:https://stackoverflow.com/questions/4958756/click-lost-on-focusing-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!