VB.NET: как предотвратить ввод пользователя в ComboBox - PullRequest
53 голосов
/ 05 мая 2010

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

Ответы [ 10 ]

110 голосов
/ 05 мая 2010

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

3 голосов
/ 18 февраля 2014

Использовать KeyPressEventArgs,

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub
2 голосов
/ 11 января 2013

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

ШАГИ:

  1. Выберите ваш комбинированный список.
  2. Перейдите в его окно свойств и выберите DropdownStyle и измените его значение на DropdownList.
2 голосов
/ 05 мая 2010

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

0 голосов
/ 24 ноября 2017

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

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

End Sub
0 голосов
/ 05 апреля 2017

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

---- в декларации уровня формы 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
0 голосов
/ 05 апреля 2017

---- в декларации уровня формы cbx veriable ---

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
0 голосов
/ 11 марта 2016
Private Sub ComboBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox4.KeyPress
    e.keyChar = string.empty
End Sub
0 голосов
/ 18 мая 2013

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

РЕШЕНИЕ на 3 основных шагах:

шаг 1.

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

     Dim xCurrentTextValue as string

шаг 2.

Создайте клавишу combobox1 события вниз и присвойте переменной xCurrentTextValue текущий текст комбинированного списка, если какая-либо клавиша, отличная от «ENTER», нажата в тексте комбинированного списказначение сохраняет исходное текстовое значение

Пример:

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 или отличаетсячем ничего, то 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 и клавишу со стрелкой ВНИЗ, также по какой-то причине она не проверила событие нажатия клавиши, пока я не отобразил какое-либо окно сообщения


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

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

xCurrentTextValue = ComboBox1.Text

If e.KeyCode <> Keys.Enter Then
    Me.ComboBox1.Text = xCurrentTextValue
End If
0 голосов
/ 05 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...