Настроить фокус на управление после выбора выбранного индекса данных datagridview

DannyB спросил: 28 апреля 2018 в 08:24 в: c#

У меня есть проблема с этой проблемой в течение длительного времени.

У меня есть пользовательский элемент управления на закладке, который содержит:

  1. datagridview
  2. tablelayout с метками, текстовыми полями и кнопками, которые устанавливаются на основе строки, выбранной в datagridview

Теперь уловка заключается в том, что фокус также должен измениться на элемент управления в таблице. выбранный элемент имеет состояние "foo", управление "foobar" должно иметь фокус, но если выбранный элемент имеет состояние "foofoo", управление "foofoobar" должно иметь фокус.

Я обрабатываю это, используя событие SelectionChanged.

Все это работает отлично, если я вручную выберу выбранный элемент. Когда элемент управления загружен и первая строка выбрана, фокус установлен неправильно.

Я предполагаю, что это связано с установщиком табордов класса Control, который переопределяет мой фокус, но я не могу понять, какое событие вызывает триггер настройки таргетинга.

Я пробовал:

  1. переопределение OnLoad и OnLayout и вызов того же кода, что и вызов ed в событии SelectionChanged
  2. переопределение OnLoad и OnLayout и сначала установить вторую строку, после чего я установил первую строку для запуска события SelectionChanged

Но ничего не работает.

Любые идеи приветствуются.

private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
        SelectInput();
}private void SetInputFocus() {
    if (isValid) {
        foo.Focus();
    } 
   else {
        foofoo.Focus();
    }

1 ответ

Есть решение
L_J ответил: 28 апреля 2018 в 10:11

Задайте фокус в событии YourTabControl_Layout, как и в событии SelectionChanged.

Вы также можете установить фокус изначально на любой элемент управления, даже на вкладке и в таблице, с событием Form1_Load.

    private void Form1_Load(object sender, EventArgs e)
    {
        ActiveControl = SomeControl;
    }    private void YourTabControl_Layout(object sender, LayoutEventArgs e)
    {
        if (YourTabControl.SelectedIndex == 0)
            SomeControl.Focus();
    }
DannyB ответил: 28 апреля 2018 в 10:50
YourTabControl_Layout сделал трюк, спасибо.