Первый вариант должен заключаться в том, чтобы заставить пользователя выбрать элемент из раскрывающегося списка, а не вводить его от руки. Вы делаете это, устанавливая для свойства DropDownStyle
значение DropDownList
вместо DropDown
. В этом случае при вводе символа будет выбран следующий элемент, который начинается с этого символа, если он существует, и ничего не будет делать в противном случае. в контроль. Это означает обработку события Validating
для проверки содержимого элемента управления и предотвращения потери фокуса в случае сбоя. Вы также можете обработать событие Validated
, чтобы что-то сделать после того, как элемент управления прошел проверку. Это может выглядеть так:
Private Sub ComboBox1_Validating(sender As Object, e As CancelEventArgs) Handles ComboBox1.Validating
If ComboBox1.Text <> String.Empty AndAlso Not ComboBox1.Items.Contains(ComboBox1.Text) Then
ComboBox1.SelectAll()
MessageBox.Show("Please select an item in the drop-down list",
"Invalid Item",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation)
'Don't let the control lose focus.
e.Cancel = True
End If
End Sub
Private Sub ComboBox1_Validated(sender As Object, e As EventArgs) Handles ComboBox1.Validated
ComboBox1.SelectedIndex = ComboBox1.FindStringExact(ComboBox1.Text)
End Sub
В этом случае пользователь не сможет покинуть элемент управления, пока не выберет или не введет допустимое значение, которое вообще не будет содержать текста. Как только они выберут или введут допустимое значение и сместят фокус, будет выбран соответствующий элемент в раскрывающемся списке. Если вы этого не сделаете, пользователь может ввести допустимое значение, но SelectedItem
и SelectedIndex
все равно будут Nothing
и -1 соответственно.