При каждом открытии формы система автоматически фокусирует один из элементов управления для вас. Насколько я могу судить, элемент управления, который получает фокус, является первым включенным элементом управления в порядке вкладок в соответствии со стандартным поведением Windows.
Вопрос в том, как изменить это во время выполнения без необходимости динамически переставлять порядок табуляции. Например, некоторые формы могут захотеть изменить изначально ориентированный элемент управления на основе логики программы, чтобы сделать фокус наиболее подходящим. Если вы просто сфокусируете какой-то другой элемент управления внутри вашего обработчика OnLoad
, логика по умолчанию будет выполнена в любом случае и перефокусирует элемент управления по умолчанию.
Если вы пишете на C / C ++ и используете необработанную оконную процедуру или MFC , вы можете вернуть 0 (FALSE
) из вашего обработчика WM_INITDIALOG
, и логика фокусировки по умолчанию будет пропущена , Однако я не могу найти способ сделать это в Windows Forms . Лучшее, что я придумал, - это использование BeginInvoke
для установки фокуса после окончания OnLoad
, например:
protected override void OnLoad( System.EventArgs e )
{
base.OnLoad( e );
// ... code ...
BeginInvoke( new MethodInvoker( () => this.someControl.Focus() ) );
}
Должен быть какой-то правильный способ сделать это - что это?