C # автозаполнение триггера combobox SelectionChangeCommited

#c# #.net #winforms #autocomplete #combobox

#c# #.net #winforms #автозаполнение #выпадающий список

Вопрос:

У меня возникли проблемы со свойством автозаполнения выпадающего списка. Я хочу запускать SelectionChangeCommited событие каждый раз, когда выбираю элемент с помощью автозаполнения, но это не работает. Событие запускается только тогда, когда я щелкаю мышью и выбираю опцию или когда выпадающий список сфокусирован, и я использую клавиши со стрелками на клавиатуре. Как мне добиться такого поведения с помощью свойства автозаполнения?

В моей комбинации установлены следующие свойства:

 AutoCompleteMode = SuggestAppend
AutoCompleteSource = ListItems
FormattingEnabled = True
  

Элементы в моей комбинации задаются с помощью источника данных.

Есть идеи? Спасибо

Ответ №1:

Если вы имеете в виду, что хотите, чтобы он регистрировал изменения при запуске ввода:

Вызовите событие SelectionChangeCommited из события TextChanged.

Если вы никогда этого не делали, самый простой пример, который я смог найти, был на форумах .net здесь. Конечно, методы, показанные там, являются общими, но их очень просто понять и применить к вашему коду.

ПРАВКА ИСПРАВЛЕНА (по состоянию на самый последний комментарий):

По-прежнему связывайте события вместе, но вместо использования TextChanged , которое будет возникать при каждом вводе, используйте SelectedIndexChanged , который возникает при использовании мыши для выбора автоматически предлагаемого элемента.

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   comboBox1_SelectionChangeCommitted(sender, e);
}
  

Комментарии:

1. Не тогда, когда я начинаю печатать, я хочу вызвать событие при выборе предложенного варианта.

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

3. Это не сработало, позвольте мне проверить это.

4. Это потому, что это неправильный код, я вставил неправильный, мои извинения. Я исправил это (и тоже протестировал, у меня это сработало). Также причина, по которой код других парней не работает, заключается в том, что событие, в котором он вызывает код, запускается, когда сам элемент управления проверяется при загрузке самой формы.

5. Вы уже пробовали отредактированный код выше? Я не был уверен, так как я опубликовал это для вас в пятницу вечером, дайте мне знать, как это получается.

Ответ №2:

вы можете использовать трюк и вызвать comboBox1_SelectionChangeCommitted в подтвержденном событии

когда текст в combobox изменится и пользователь покинет поле со списком, он будет запущен

   private void comboBox1_Validated(object sender, EventArgs e)
    {
        comboBox1_SelectionChangeCommitted(sender, e);

    }
  

Комментарии:

1. Да, я проверил, решением моей проблемы был ответ выше, в любом случае спасибо