Установить фокус на контроль после изменения индекса выбранной таблицы. - PullRequest
0 голосов
/ 22 мая 2018

Я давно борюсь с этой проблемой.

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

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

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

Я обрабатываю это с помощью события SelectionChanged.

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

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

Я попытался:

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

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

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

private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
        SelectInput();
}

private void SetInputFocus() {
    if (isValid) {
        foo.Focus();
    } 
   else {
        foofoo.Focus();
    }

1 Ответ

0 голосов
/ 22 мая 2018

Установите фокус в событии 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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...