Как выбрать предыдущий элемент управления для элемента управления контейнера? - PullRequest
1 голос
/ 17 июня 2009

У меня есть элемент управления, который содержит NumericUpDown. Обновление отображается только тогда, когда контейнер имеет фокус, поэтому контейнер должен быть выбран (иначе он никогда не сможет получить фокус). Я хочу, чтобы элемент управления вел себя как единое целое в отношении порядка табуляции; то есть, когда пользователь вкладывает элемент управления, он показывает обновление, и обновление фокусируется; когда пользователь уходит от обновления, это как если бы он ушел от элемента управления.

Достаточно просто выполнить первую часть: в OnEnter контейнера я фокусирую обновление. Если пользователь уходит без сдвига, он также работает нормально, так как следующий элемент управления в порядке вкладок является правильным. Однако предыдущим элементом управления в порядке перехода к обновлению является контейнер, так как его нужно было выбирать; поэтому, когда пользователь сдвигает вкладки от обновления, контейнер выбирается, и поэтому обновление выбирается снова.

Как выбрать предыдущий элемент управления для элемента управления контейнером, когда пользователь сдвигает вкладки от обновления?

UPDATE:

Моя проблема не в том, чтобы определить, когда мне нужно это сделать, - это в поиске элемента управления для отправки фокуса.

UPDATE:

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

Ответы [ 4 ]

2 голосов
/ 17 июня 2009

если вы знаете направление вкладки, вы можете использовать SendKeys.Send("+{TAB}"); и SendKeys.Send("{TAB}");

или вы можете использовать Control.SelectNextControl()

1 голос
/ 17 июня 2009
void UserControl1_Leave(object sender, EventArgs e)
    {
        this.numericUpDown1.Visible = false;
        Control c = Parent.Controls[this.Name];
        int i = Parent.Controls.IndexOf(c);
        Parent.Controls[i - 1].Focus();
    }

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

0 голосов
/ 17 июня 2009

На самом деле для меня это поведение по умолчанию?

0 голосов
/ 17 июня 2009

Это хак, но вы можете использовать событие OnEnter в сочетании с логической переменной. Если для переменной задано значение true, то вы уже были в своем контейнере и переходите к предыдущему элементу управления (который может быть свойством вашего элемента управления контейнером, чтобы вы знали, куда идете).

Если для переменной задано значение false, вы просто переходите к пользовательскому элементу управления и фокусируетесь на повышении / понижении.

На выходе из контейнера установите переменную обратно в false.

Я уверен, что есть что-то более простое, но это не самое быстрое, что я могу придумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...