У меня есть приложение VB.NET (2005), разработанное моим начальником, которое использует более 100 элементов управления вводом и отображением (текстовые поля, поля со списком и т. Д.), Многие из которых связаны с ярлыками. Мой босс попросил меня установить порядок вкладок, а затем перехватить нажатие клавиши, чтобы пользователь мог использовать ввод для навигации по элементам управления. У меня есть 2 приложения, как это, чтобы работать над.
Для порядка табуляции я не смог использовать функцию View / TabOrder, так как на экране так много маленьких всплывающих окон tabindex, что я не вижу никаких элементов управления в форме, по которым можно щелкнуть. Я попытался щелкнуть «через» всплывающее окно с некоторым успехом, но он все еще не дал мне порядок вкладок, который я хотел. Помощник по вкладкам, поставляемый с CodeSMART, также не дал мне желаемого результата, поэтому я мог его использовать.
Элементы управления этого пользовательского элемента управления распределены по многим группам, которые, в свою очередь, распределены по нескольким панелям splitcontainer. 1-я панель в главном splitcontainer имеет 3 основных групповых блока, которые выбираются с помощью кнопки набора инструментов (которая устанавливает желаемый групповой блок видимым и превращает остальные в невидимый.)
Пример:
Private Sub ShowMainPanel()
'Note: Panels are groupboxes
Me.MaterialPanel.Visible = False
Me.HaulPanel.Visible = False
Me.MainPanel.Visible = True
End Sub
Каждый из этих групповых блоков содержит больше групповых блоков, каждый из которых содержит от 1 до 15 элементов управления. Некоторые из них доступны только для чтения, но другим нужна информация от пользователя. Для обязательных элементов управления их табуляция установлена на true.
Так что я ВРУЧНУЮ устанавливаю для каждой из таблиц основной группы индексы от 0 до 2. Затем для 1-го группового блока (основной панели) я устанавливаю табельный индекс для каждого из его элементов управления и групповых блоков, которые содержатся внутри. Для элементов управления неконтейнерного типа табличные индексы имеют значения от 0 до 25, а затем групповые блоки (подгруппы) на основной панели имеют значения от 26 до 48. Затем я перешел к каждому элементу управления в этих подгруппах и установил индекс вкладки для этих элементов управления, начиная с 0 через Control.count-1 для группы.
В итоге, мои табуляторы выглядят так (сокращенно):
mainPanel = 0
1st fields = 0.0
2ndfield = 0.1
3rd field = 0.2
1st group = 0.3
1st field in 1st grp1 = 0.3.0
2nd field in 1st grp1 = 0.3.1
2nd group = 0.4
1st field in 1st grp2 = 0.4.0
2nd field in 1st grp2 = 0.4.1
materialPanel = 1
1st fields = 1.0
2ndfield = 1.1
3rd field = 1.2
1st group = 1.3
1st field in 1st grp1 = 1.3.0
2nd field in 1st grp1 = 1.3.1
2nd group = 1.4
1st field in 1st grp2 = 1.4.0
2nd field in 1st grp2 = 1.4.1
Примечание: я фактически не вводил, например, 1.4.0 для tabindex, но 0 для элемента управления, 4 для подгруппы и 1 для основной группы.
Затем я устанавливаю zorder с помощью панели «Структура документа» в соответствии с порядком вкладок.
Как только я сделал все это, я наконец смог получить порядок табуляции, который я хотел работать для основной панели.
Но когда я применил то же самое к другим 2 групповым полям (materialPanel и haulpanel), вкладки полностью игнорируются. Вкладка не работает вообще в приложении. для 2-х главных групповых ящиков (MaterialPanel и HaulPanel). Приложение представляет собой Control Library, поэтому я использую встроенный UserTestContainer при отладке, а когда отображается один из 2-х 2-х групповых блоков, клавиша табуляции перемещает фокус из приложения в тестовый контейнер.
Этого не происходит, когда на 1-й групповой панели (MainPanel). Работает нормально.
Установка этого материала заняла у меня 3-4 часа на утомительную работу. Из-за большого количества элементов управления с этим приложением сложно работать, поскольку каждый раз, когда вносится изменение в конструктор форм, его обработка занимает от 15 до 20 секунд.
Кто-нибудь знает, что здесь происходит?