2016-04-01 4 views
3

Нажатия Введите ключа очищает текст ComboBox, когда выпадающий открыт в ComboBox с AutoCompleteMode набором для Append.Введите ключевую проблему в ComboBox с AutoCompleteMode установлен на Append

Мы знаем, что в формах вдов, когда свойство AutocompleteMode в ComboBox установлено на Append, мы получаем значения перед тем, как ввести полный текст элемента.

Проблемы здесь:

  • я нажимаю кнопку выпадающей и откройте выпадающий
  • я пытаюсь ввести некоторые символы, я получаю значение, как ожидался, и он завершает текст.
  • Но когда я нажимаю Введите удаляет текст поля со списком.

Как я могу иметь Append вариант, а также сделать нажатием Enter когда Dropdown открыта, держать введенный текст и не удалить его.


Я попробовал вариант Нет в свойстве «Auto полного режима» она работает нормально, но нет Append данных ....

я не нужно предложить и предложить добавить варианты в Свойство «Авто полный режим», так как оно открывает другое раскрывающееся окно ....

Мне нужно ввести данные, пока данные в раскрывающемся списке перечислены, и когда я получу значения добавления, просто нажав кнопку ввода, он должен работать (без получения удаленных) ...

Is это возможно?

Благодаря

ответ

3

Когда выпадающий закрыт, он работает, как ожидалось, но когда выпадающий открыта, нажав Enter закрывает выпадающий список и удаляет введенный текст.

В качестве решения можно вывести из ComboBox и переопределить IsInputKey таким образом:

public class MyComboBox : ComboBox 
{ 
    protected override bool IsInputKey(Keys keyData) 
    { 
     switch ((keyData & (Keys.Alt | Keys.KeyCode))) 
     { 
      case Keys.Enter: 
      case Keys.Escape: 
       if (this.DroppedDown) 
       { 
        this.DroppedDown = false; 
        return false; 
       } 
       break; 
     } 
     return base.IsInputKey(keyData); 
    } 
} 
+0

Спасибо за решение ... Где мне нужно сделать, чтобы включить переопределения methiod? Нужно ли создавать какое-либо событие при щелчке по выпадающему меню и попробовать метод переопределения? Можете ли вы помочь мне в понимании решения? –

+0

Как вы видите в ответе, вы должны создать новый класс 'MyComboBox', унаследованный от' ComboBox', и использовать его вместо 'ComboBox'. –

+0

Я создал этот класс в моем файле form.cs ... и у меня есть мой предыдущий код, где я использую Combobox_commodity для отображения более 100 записей .... Как я могу наследовать этот класс с уже существующим полем товаров? Прошу прощения, я новичок в этом winforms, пожалуйста, руководство в этом .... –