У меня есть проблема, где управление ComboBox изменится, это - текстовое значение, когда это изменено. Вот некоторый пример кода, который я обработал:
Option Explicit On
Option Strict On
Public Class FMain
Private Sub FMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
uxComboBox.DropDownStyle = ComboBoxStyle.DropDown
uxComboBox.AutoCompleteSource = AutoCompleteSource.ListItems
uxComboBox.AutoCompleteMode = AutoCompleteMode.Suggest
ComboTest()
End Sub
Private Sub ComboTest()
Dim value As String = "6"
uxComboBox.Text = String.Empty
uxComboBox.Items.Clear()
uxComboBox.Items.AddRange(New String() {"4 9/16", "6 9/16", "7 9/16", "8 9/16"})
Dim index As Integer = uxComboBox.FindStringExact(value)
If uxComboBox.SelectedIndex index Then
uxComboBox.SelectedIndex = index
End If
If uxComboBox.SelectedIndex = -1 AndAlso _
Not String.Equals(uxComboBox.Text, value, StringComparison.OrdinalIgnoreCase) Then
uxComboBox.Text = value
End If
' unselect the text in the combobox
'
uxComboBox.Select(0, 0)
End Sub
End Class
Обратите внимание, что эта форма (FMain) имеет единственное поле комбинированного списка на нем (uxComboBox), который прикрепляется с вершиной. Когда я выполняю код, я вижу, что поле комбинированного списка имеет значение "6", который является тем, что я ожидал бы. Когда я затем изменяю размер формы, поле комбинированного списка получает значение "6 9/16", которое является тем, что я НЕ ожидал бы.
Кто-либо знает, почему это происходит? Какие-либо предложенные обходные решения?
Спасибо!
Stephen
Да, это известная ошибка в родной Windows реализации ComboBox. Есть еще один аспект этой ошибки. Положите кнопку на форму и дайте ей TabIndex = 0, измените TabIndex CB на 1. Запустите его, кнопка будет иметь фокус. Изменить размер. Обратите внимание, что текст ComboBox изменяется, как и раньше, но теперь также выделяется, как будто он имеет фокус. Даже если это не так.
Я думаю, что эта ошибка существовала со времен Vista, она не была исправлена в Win7. Обходного пути для этого нет.
Когда форма загружается, ComboTest
выполняется, и вы видите '6', однако, когда вы изменяете размер, она не показывает новые данные, звучит так, как будто вам нужно обновить комбо-бокс, независимо от размера или нет.
Попробуйте uxComboBox.Refresh()
сразу после строки uxComboBox.Items.AddRange
.
А после строки 'ComboTest' также установите выбранный индекс равным 0 uxComboBox.Index = 0
.
Надеюсь, это поможет, С наилучшими пожеланиями, Том.