Как настроить ComboBox, чтобы пользователь мог вводить первые несколько символов, а затем автоматически выбирать элемент, нажимая клавишу ВВОД? - PullRequest
0 голосов
/ 31 октября 2018

У меня такое ощущение, что это очень простая вещь, которую я пропускаю.

У меня есть два ComboBox, которые позволяют пользователям искать / выбирать записи, которые они хотят просмотреть. Один заполнен именами клиентов, а другой заполнен номерами клиентов, поэтому пользователь может искать конкретную запись, выбрав имя или номер.

Каждый ComboBox заполняется таблицей данных, возвращаемой из базы данных SQL Server.

В каждом ComboBox для DropDownStyle установлено значение DropDown, для AutoCompleteMode установлено значение SuggestAppend, а для AutoCompleteSource установлено значение ListItems.

Пользователь может либо выбрать, щелкнув стрелку DropDown, а затем щелкнув по элементу, которым он был, или он может начать с ввода, и ComboBox сузит количество элементов в списке на основе символов, набираемых пользователем.

Использование мыши для щелчка по нужному элементу в списке работает нормально ... запускается процедура для извлечения выбранного элемента из базы данных.

Однако, когда пользователь вводит желаемый выбор и нажимает ENTER, ничего не происходит. Они должны щелкнуть стрелку DropDown и щелкнуть элемент, чтобы программа могла извлечь соответствующую запись.

Как заставить ComboBox вытягивать соответствующую запись, когда пользователь нажимает ввод?

Я использую Visual Basic.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Спасибо JMichael за то, что помог мне выбрать правильный путь. Я публикую здесь свое решение на тот случай, если оно поможет кому-то, у кого в будущем возникнет похожий вопрос:

Код, который я добавил к событию ComboBox SelectChangeCommitted, также необходимо добавить к событию ComboBox KeyUp:

Private Sub cboPolicySearch_KeyUp(sended as Object, e As KeyEventArgs) Handles cboPolicySearch.KeyUp
    If e.KeyCode = Keys.Enter Then
        GetSelectedPolicySearchRecord()
        e.Handled = True
    End If
End Sub     'cboPolicySearch_KeyUp

Подпрограмма GetSelectedPolicySearchRecord () содержала всю информацию, необходимую для вызова хранимой процедуры SQL, чтобы выбрать данные для записи, выбранной пользователем в ComboBox.

Раньше это вызывалось только из события «SelectionChangeCommitted» в ComboBox, которое выполняется, когда пользователь щелкает раскрывающийся список, а затем щелкает номер политики из раскрывающегося списка.

Мне нужно было добавить тот же вызов к GetSelectedPolicySearchRecord в событии «KeyUp» ComboBox для случая, когда пользователь нажимает ввод.

0 голосов
/ 05 ноября 2018

Из звуков этого вам нужно три события.

Вам нужно использовать таймер, чтобы узнать, когда пользователь прекратил печатать. Чтобы сделать это, вам нужно, чтобы одно событие было в том случае, если поле, в которое они вводят, изменило свое значение (<control's name>.TextChanged). Это запустит / перезапустит тиканье таймера (так что у пользователя есть пара секунд, чтобы сделать паузу до следующего события).

Следующим событием будет событие Tick для этого таймера. Это событие остановит таймер, а затем передаст фокус на правильное поле, так что когда пользователь нажимает клавишу ВВОД, он не нажимает клавишу ВВОД в поле, в которое он вводил. Вам нужно написать функцию для поиска нужный элемент в ComboBox и вызвать его.

Тогда у вас будет третье событие, либо KeyPress, KeyDown, либо KeyUp на самом ComboBox. Я бы склонялся к KeyUp, чтобы избежать проблем, если пользователь по какой-либо причине удерживает клавишу ВВОД. Это было бы то, что выбирает предмет.

В качестве последнего FYI, я предполагаю, что вы используете Visual Studio для написания своего кода. Если нет, вы должны, и если вы / когда вы есть, вы можете выбрать поле, с которым вы хотите работать, в раскрывающемся списке в верхнем левом углу редактора, а затем посмотреть на связанные события в верхнем правом углу. вниз.

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