Как я могу назначить TabIndex во время выполнения в VB6 - PullRequest
2 голосов
/ 15 марта 2011

Я работаю в сервисном приложении VB6. Это приложение для Windows. Мой клиент хочет настроить индекс вкладки управления во время выполнения. Я сохраняю настройки клиента в базе данных доступа.

Следующая подпрограмма устанавливает индекс вкладки элементов управления

Private Sub SetTabSetting()
Dim i As Integer
Dim Ctr As Control
If UBound(TSetting) > 0 Then
    For i = 0 To UBound(TSetting)
        For Each Ctr In Me.Controls
            Dim matched As Boolean: matched = False

            If Ctr.Name = TSetting(i).ControlName Then
               Ctr.TabIndex = TSetting(i).TabIndexNum
               Exit For
            End If
        Next
    Next
End If
End Sub

TSetting - массив TYPE, определенный в глобальном модуле.

Private Sub Form_Load()
  GetRATabSetting
  SetRATabSetting
End Sub

GetRATabSetting извлекает значения из базы данных и заполняет их в массив TYPE.

Код выполняется довольно хорошо. Даже значения извлекаются из базы данных и устанавливаются на элементы управления правильно. Но вкладка следует за индексом, установленным во время разработки.

Я делаю какую-то ошибку? Можно ли установить tabindex элементов управления во время выполнения? Есть ли другой способ сделать это?

1 Ответ

4 голосов
/ 15 марта 2011

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

Index - TabIndex
1 - 0
2 - 1
3 - 2
4 - 3
5 - 4

Если вы измените 3 на 1, тогда это будет выглядеть так

Index - TabIndex
1 - 0
2 - 2
3 - 1
4 - 3
5 - 4

Visual Basic автоматически увеличится на один все таб-индекс, равный и превышающий назначенный вами. Никогда не будет времени, когда два элемента управления будут иметь одинаковый tabindex. Это вызывает проблемы для подпрограмм, которые назначают индексы вкладок, как у вас.

Вам нужно не назначать tabindex непосредственно из базы данных, а создавать массив управляющих индексов, связанных с индексами вкладок. Сортируйте его на основе tabindex, а затем начинайте присваивать, начиная с того, что находится в tabindex 0 (или самом низком).

...