Как управлять порядком фокусировки для текстовых полей внутри панели?

У меня есть форма со многими текстовыми полями. Мне нужны текстовые поля внутри одной группы и другие текстовые поля внутри другой группы. По группе мне просто нужен способ заставить эти текстовые поля казаться принадлежащими друг другу.

Я сделал две панели и добавил к ним текстовые поля. Затем я поместил границу вокруг этих панелей.

моя проблема в том, что когда я нажимаю Tab, фокус не переходит в следующее текстовое поле, а скорее он идет в случайном заказать в другое текстовое поле. Иногда следующее текстовое поле находится внутри первой панели, иногда оно находится во второй панели. Как я могу контролировать порядок фокусировки?

Это изображение, чтобы проиллюстрировать мою точку зрения:

an image to illustrate my point

5 ответов


как говорили другие, используйте TabIndex свойство для указания порядка табуляции и TabStop свойство, чтобы определить, может ли элемент управления быть вкладками вообще.

однако есть гораздо более простой способ сделать это от дизайнера. При просмотре формы в конструкторе убедитесь, что выбрана форма (а не элемент управления в форме) (это можно сделать, щелкнув один раз в пробелах вокруг формы), а затем выберите Вид -> Вкладка Заказ.

при активной вкладке Конструктор заказов вы увидите TabIndexes каждого элемента управления. Щелкните их в том порядке, в котором вы хотели бы иметь возможность вкладки через них. The TabIndex всплывающие подсказки будут меняться с синего на белый, как вы назначаете их. Когда вы закончите, выберите Вид -> Последовательность снова вернуться к нормальному состоянию конструктора.

еще одна вещь, чтобы упомянуть, было бы предложить, используя UserControls, когда это возможно. Если вы повторно используете части своего пользовательского интерфейса с хорошим дизайном UserControls, Вы можете избежать наличия формы с десятками и десятками табуляций для назначения, так как каждый UserControl будет иметь свой собственный внутренний порядок табуляции, который будет автоматически применяться при размещении на форме, и вам нужно будет только установить TabIndex на .


порядок табуляции должен быть установлен следующим образом. Обе верхние панели контейнера должны иметь TabIndex 0 и 1 соответственно, а его дочерний элемент управления должен иметь префикс TabIndex по индексу вкладки родительского элемента управления. то есть. если Panel1 имеет TabIndex 0, то его дочерние элементы управления должны иметь TabIndex 0.0, 0.1,0.2, 0.3...

Примечание: убедитесь, что если свойство Tab Stop любого элемента управления имеет значение false, курсор не будет перемещаться в этот элемент управления. В этом случае TabIndex не будет работа.

enter image description here


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

вы хотите установить TabIndex для каждого из ящиков так, чтобы табуляция вращалась через коробки в том порядке, в котором вы ожидаете.


С MSDN-управление.Свойство tabindex:

индекс вкладки может состоять из любого допустимого целого числа, большего или равного ноль, меньшие числа находятся раньше в порядке табуляции. Если больше чем один элемент управления на том же родительском элементе управления имеет тот же индекс вкладки, Z-порядок из элементов управления определяет порядок цикла через элементы управления.

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

соответственно,

textbox1.TabIndex = 1; // and do the same for each one in the desired order
textbox1.TabStop = true;

вам нужно установить TabIndex свойства TextBox управление.

из MSDN:Control.TabIndex

получает или задает порядок табуляции элемента управления в контейнере.

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

Попробуйте Это: (Пример)

txtTextBox1.TabIndex = 1;
txtTextBox2.TabIndex = 2;
txtTextBox3.TabIndex = 3;

в приведенном выше примере фокус порядок ниже:

txtTextBox1
txtTextBox2
txtTextBox3

Примечание: вы должны убедиться, что TabStop свойству элементов управления textbox присвоено значение True, иначе порядок вкладок не работает, но по умолчанию при проектировании элементов управления с помощью Visual Studio IDE(С помощью функции перетаскивания) TabStop свойство имеет значение True.

из MSDN:управление.Остановка табуляции

возвращает или задает значение, указывающее, может ли пользователь перевести фокус на этот элемент управления используя клавишу TAB.

Попробуйте Это: Настройка TabStop свойства

txtTextBox1.TabIndex = 1;
txtTextBox1.TabStop = True;

txtTextBox2.TabIndex = 2;
txtTextBox2.TabStop = True;

txtTextBox3.TabIndex = 3;
txtTextBox3.TabStop = True;