2011-02-10 6 views
2

Вопрос: Есть ли способ всегда позволять клику, который приносит форму для фокусировки, оказывает влияние на форму?Нажмите на кнопку фокуса фокуса

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

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

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

+0

Поскольку это стандартное поведение для меню, вы найдете его, как это в почти каждом приложении. По этой причине вы можете отделить приоритет от важности «исправления» этого, потому что пользователи уже привыкли к нему. Исключение будет, если этот сценарий имеет особое значение в вашем приложении. – tenfour

+0

Возможный дубликат [ToolStrip иногда не реагирует на щелчок мышью] (https://stackoverflow.com/questions/472301/toolstrip-sometimes-not-ответ -to-a-mouse-click) –

ответ

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

0

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