VB.NET: как предотвратить ввод пользователя в ComboBox

Как предотвратить ввод данных Пользователем в ComboBox, чтобы пользователь мог выбрать только один из элементов в определенном списке?

10 ответов


установить DropDownStyle свойство combobox to DropDownList. Это позволит выбирать только элементы в списке и не позволит вводить данные в произвольной форме.


видеть, как пользователь колотит по элементу управления, который переопределяет ее решения, - печальное зрелище. Задайте свойству Enabled элемента управления значение False. Если вам это не нравится, измените его свойство Items, чтобы выбрать только один элемент.


Используйте KeyPressEventArgs,

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub

Сделать Combobox Только Для Чтения. В этом случае пользователь не может ввести свой текст или не изменить данные.

действия:

  1. выберите свой combobox.
  2. перейдите в свой propertybox и выберите DropdownStyle и измените его значение на DropdownList.

установите для атрибута ReadOnly значение true.

или если вы хотите, чтобы combobox появился и отобразил список "доступных" значений, вы можете обработать событие ValueChanged и вернуть его к неизменяемому значению.


это самый простой способ, но он работает для меня с именем ComboBox1

решение на 3 основных шага:

Шаг 1.

объявите переменную в начале формы, которая будет содержать исходное текстовое значение ComboBox. Пример:

     Dim xCurrentTextValue as string

Шаг 2.

создать событие combobox1 ключ вниз и назначить переменной xCurrentTextValue текущий текст combobox если нажата какая-либо клавиша, отличная от "ENTER", combobox text value сохраняет исходное текстовое значение

пример:

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown

    xCurrentTextValue = ComboBox1.Text

    If e.KeyCode <> Keys.Enter Then
        Me.ComboBox1.Text = xCmbItem
    End If

End Sub

Шаг 3.

проверка при изменении текста комбо если len (xcurrenttextvalue)> 0 или отличается от nothing, то combobox1 принимает значение переменной xcurrenttextvalue

Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
    If Len(xCurrentTextValue) > 0 Then
        Me.ComboBox1.Text = xCurrentTextValue

    End If
End Sub

========================================================== вот оно,

Первоначально я только попробовал шаг номер 2, но у меня есть проблемы, когда вы нажимаете клавишу DEL и Стрелка вниз, также по какой-то причине он не проверял событие keydown, если я не отображаю какое-либо окно сообщения


!Извините, это исправление на Шаге 2, я забыл изменить переменную xCmbItem на xCurrentTextValue, xCmbItem она использовалась для моего личного использования

ЭТО ПРАВИЛЬНЫЙ КОД

xCurrentTextValue = ComboBox1.Text

If e.KeyCode <> Keys.Enter Then
    Me.ComboBox1.Text = xCurrentTextValue
End If

---- в Форма декларации СВХ строк---

Dim cbx as string

Private Sub comboBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Enter
    cbx = Me.comboBox1.Text
End Sub

Private Sub comboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Leave
    Me.comboBox1.Text = cbx
End Sub

я исправляю формат-спасибо

- - - - в объявлении уровня формы cbx veriable--- dim cbx как строка

Private Sub comboBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Enter 
    cbx = Me.comboBox1.Text End Sub

Private Sub comboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Leave 
    Me.comboBox1.Text = cbx End Sub

Private Sub ComboBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox4.KeyPress
    e.keyChar = string.empty
End Sub

Я думаю, что это правильный и самый простой код для этого вида проблемы

Private Sub CourseName_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles CourseName.KeyPress
    e.Handled = True

End Sub