Я давно борюсь с этой проблемой.
У меня есть пользовательский элемент управления на вкладке, которая содержит:
- datagridview
- tablelayoutс элементами управления надписью, текстовым полем и кнопкой, которые устанавливаются на основе строки, выбранной в представлении данных
Теперь выгода заключается в том, что фокус также должен измениться на элемент управления в таблице: если выбранный элемент имеет состояние'foo', элемент управления 'foobar' должен иметь фокус, но если выбранный элемент имеет состояние 'foofoo', элемент управления 'foofoobar' должен иметь фокус.
Я обрабатываю это с помощью события SelectionChanged.
Это все работает нормально, если я вручную нажимаю на выбранный элемент.Когда элемент управления изначально загружен и выбран первый ряд, фокус не установлен правильно.
Я думаю, это связано с установщиком таборедера класса Control, который переопределяет мой фокус, но я не могувыяснить, какое событие вызывает установщик табордера.
Я попытался:
- переопределить OnLoad и OnLayout и вызвать тот же код, который вызывается в событии SelectionChanged
- переопределить OnLoadи OnLayout и сначала устанавливаем 2-й ряд, после чего я устанавливаю 1-й ряд для запуска события SelectionChanged
Но ничего не работает.
Любые идеи приветствуются.
private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
SelectInput();
}
private void SetInputFocus() {
if (isValid) {
foo.Focus();
}
else {
foofoo.Focus();
}