Я переписываю приложение в VB 2012, которое управляет/редактирует/распечатывает индекс уставов. Это указатель, который можно найти в конце книги, но он содержит 2500 основных статей, таких как «Выборы», «Налогообложение», «Школы» и т. д. Более 190 000 записей соответствуют основным статьям. В напечатанном виде занимает четыре тома.
Чтобы помочь пользователям, приложение берет 2500 основных записей и определяет, какие пары букв присутствуют на основе двух начальных букв основных записей. Эти пары букв загружаются в поле со списком. Когда пользователь выбирает пару букв, другое поле со списком заполняется основными элементами, начинающимися с этих букв. На моем компьютере с Windows 8.1 были протестированы различные методы выбора пар букв, и все они работали. Когда началось пользовательское тестирование, при установке в Windows 7 была отмечена аномалия внешнего вида, хотя функциональность работала. Вот некоторый код, демонстрирующий проблему:
Private Sub LoadMe(sender As Object, e As EventArgs) Handles MyBase.Load
'some letter pairs
ComboBox1.Items.AddRange(
New String() {"Ab", "Ac", "Ad", "Az", "El", "En"})
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
ComboBox1.AutoCompleteMode = AutoCompleteMode.Suggest
ComboBox2.Items.AddRange(
New String() {"Ab", "Ac", "Ad", "Az", "El", "En"})
ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox2.AutoCompleteSource = AutoCompleteSource.ListItems
ComboBox2.AutoCompleteMode = AutoCompleteMode.Suggest
ActiveControl = ComboBox1
End Sub
Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
Debug.WriteLine("CB1Committed Index: [{0}] Text: [{1}]",
ComboBox1.SelectedIndex,
ComboBox1.Text)
ComboBox2.Select()
End Sub
Private Sub ComboBox2_Enter(sender As Object, e As EventArgs) Handles ComboBox2.Enter
Debug.WriteLine("Enter Index: [{0}] Text: [{1}]",
ComboBox1.SelectedIndex,
ComboBox1.Text)
End Sub
Чтобы продемонстрировать проблему, запустите приложение и выполните следующие действия, обращая внимание на то, что отображается в ComboBox1.
' Type ab
' press Enter (selected value of combobox1 is ab)
' press shift tab
' Type ab
' press Enter (selected value of combobox1 is now ac)
Если вы запустите это в Windows 7, в ComboBox1 будет отображаться «Ac», а если в 8, он будет правильно отображать «Ab». Мой вопрос: как мне заставить это правильно отображаться в Windows 7? Отладка показывает разрыв между отображаемыми и фактическими значениями.
KeyDown
дляCombBox1
и добавьте этот кодComboBox1.FindString(Asc(e.KeyCode))
. Я попытался ввестиab
, он перешел кAb
, а затем, когда я нажалa
(пока нетb
), я перешел кAc
. Однако после того, как я нажму буквуb
, он вернется к значению списка, которое равноAb
. - person Edper   schedule 24.07.2014