Combobox Autocomplete Tab-out не выбирает элемент

Итак, есть куча вопросов, похожих на мои, но ни один из них не совсем то, что мне нужно. У меня есть поле со списком, которое заполнено списком городов. Я включил автозаполнение, и оно работает именно так, как я хочу, с включенным предложением. Проблема, однако, в том, что если пользователь пытается выйти из поля со списком, он фактически не выбирает элемент. вот пример: я ищу "Орландо". Если я наберу «orla», предложение заполнит остальную часть слова (выбрано), поэтому будет отображаться «orlando». Итак, это элемент, который я хочу выбрать. Если я нажму Enter, а затем вкладку, он выберет элемент, а затем вкладку. Что мне нужно, так это табуляция для выбора основного элемента, соответствующего слову. Если мне нужно объяснить больше, я могу. Заранее спасибо!

Люк


person luke    schedule 12.08.2009    source источник
comment


Ответы (3)


Какую версию .NET вы используете? Я попробовал это в 3.5, и поведение противоположно тому, что вы описываете. Когда я набираю частичное имя и открываю табуляцию, он выбирает элемент в списке. Если я нажму Enter, он не выберет элемент и фактически очистит только что введенное значение.

Как устанавливаются ваши свойства в ComboBox? У меня есть AutoCompleteMode = SuggestAppend и AutoCompleteSource = ListItems.

person Albert Walker    schedule 14.08.2009
comment
То же поведение в 2.0 (табуляция делает выбор) - person Sorin Comanescu; 14.08.2009
comment
Я использую 3.5 sp1. Что происходит для меня, так это то, что когда я выхожу из табуляции, он заполняет остальную часть текста (но не делает первую букву заглавной) и не выбирает элемент привязки. У меня есть обработчик событий onLeave для поля со списком, поэтому он срабатывает после нажатия на вкладку. Когда он срабатывает, comboBox.SelectedItem == null. У меня есть этот обработчик событий, потому что мне нужно убедиться, что они не покинут поле, не выбрав город, потому что им не разрешено добавлять новый. - person luke; 14.08.2009
comment
Итак, мы оба правы, в некотором смысле. Во время запуска события onLeave элемент еще не выбран. Однако, как только он ушел, он выбирает элемент. Итак, мой новый вопрос: знаете ли вы, как я могу ограничить выход из поля со списком без выбора элемента? Я не могу использовать onLeave, потому что он еще не выбран. - person luke; 14.08.2009

Я получаю то же поведение, что и OP, и отмеченный ответ (от Альберта, который не может воспроизвести проблему) не является решением. Об этой проблеме также сообщили в Connect как об ошибке:

https://connect.microsoft.com/VisualStudio/feedback/details/711945/tab-on-a-winforms-combobox-with-properties-dropdownstyle-dropdownlist-autocompletemode-append-autocompletesource-listitems-doesnt-работает-правильно

Я не удосужился создать собственный элемент управления со списком, как указано в разделе «Обходной путь» ошибки подключения. Вместо этого я просто устанавливаю раскрывающийся список со значением по умолчанию:

cboAccount.SelectedValue = _accountList(0).Key;   //<--Here I set a default value
cboAccount.DroppedDown = true;
person Jeremy Thompson    schedule 19.08.2015
comment
ссылка мертва. - person Breeze; 06.04.2017
comment
может быть, это потому, что сейчас есть хотфикс? support.microsoft.com/en-us/help/2868238/ - person Breeze; 06.04.2017
comment
^^ Теперь это «Первоначальный ответ» — это термин в MS PSS. - person Jeremy Thompson; 06.04.2017

Значение теряется в сообщении WM_KILLFOCUS. Переопределение WndProc в подклассе ComboBox решило эту проблему для меня. К сожалению, у меня под рукой только VB.NET-код:

Protected Overrides Sub WndProc(ByRef m As Message)
    If m.Msg = &H8 Then  'WM_KILLFOCUS
        Dim sText As String = Me.Text
        MyBase.WndProc(m)
        Me.Text = sText
        Exit Sub
    End If

    MyBase.WndProc(m)
End Sub
person Breeze    schedule 06.04.2017