Нажмите потерянный на форме фокусировки - PullRequest
2 голосов
/ 10 февраля 2011

Вопрос: Есть ли способ, позволяющий всегда щелкать мышью, что приводит к фокусировке формы, через эффект?

Справочная информация: С моим (C # win form) приложением не в фокусе, я могу навести форму и получить тени и границы, указывающие, где находится моя мышь.

Нажав, например, на пункт меню (Файл), форма получает фокус, но меню файла не получает щелчок. Это займет дополнительный клик.

Для обычной кнопки в форме требуется только один клик.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Это можно исправить установкой фокуса до щелчка.Код 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 голос
/ 30 января 2015

Я нашел несколько полезных статей - особенно этой Рика Брюстера. Решение заключается в переопределении метода WndProc для ToolStrip (или 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;
    }
}
...