Как заставить пользователя принять предложенную запись в ComboBox? - PullRequest
3 голосов
/ 14 октября 2011

Я хочу, чтобы пользователь выбрал значение в ComboBox. Записи должны предлагаться при вводе текста пользователем.

Должен ли я использовать события, чтобы заставить System.Windows.Forms.ComboBox содержать значение из собственного DataSource?

Пример: Записи должны быть предложены пользователю ... Если я напишу "CO", в комбинированном списке должны появиться "CONGO" и "COLOMBIA", но нужно ввести только одно из этих значений пользователем. Пользователь не должен вводить «COfdfgdfg» или любую произвольную строку.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 14 октября 2011

Установить стиль поля со списком ComboBoxStyle.DropDownList

4 голосов
/ 14 октября 2011

Вы должны использовать combobox.autocompletemode, чтобы получить имена lik Congo, congress, когда пользователь вводит текст наподобие «CO»

вы можете использовать свой собственный источник данных для comboBox1.AutoCompleteSource

 this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(113, 192);
 this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 20);

Затем заполните источник элементов combox такими объектами, которые переопределяют метод ToString

public class POCLRO
{
  public int ID { get; set; }
  public string Name { get; set; }

  public override string ToString()
  {
    return Name;
  }
}

Редактировать: Необходимо выполнить проверку текста, введенного пользователем в поле со списком, если пользователь выбирает выпадающий элемент, предложенный автоматическим завершением, проверка возвращает значение true, иначе возвращается false ...

Сделайте что-то вроде ниже ...

Создайте обработчик событий KeyDown для комбинированного списка и проверьте наличие клавиши Enter. Обратите внимание, что после нажатия пользователем введите текст в поле со списком выбран (как в, выбран, как если бы вы делали операцию вырезания или копирования), и фокус остается в поле со списком.

Если нажата клавиша ввода, вызовите функцию проверки, которая будет делать все, что вам нужно, если введенное значение совпадает с именем, которое было сохранено в базе данных ...

Вы можете вызывать эту же функцию в обработчике события Leave, чтобы запретить пользователю выходить из выпадающего списка, пока не будет сделан правильный выбор.

 private void ComboBox_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.KeyCode == Keys.Enter)
    {
        ValidateSelection();
    }
 }

 private  bool validation()
 {
   // do validation here 
 }
private void ComboBox_Leave(object sender, EventArgs e)
{
    if(!ValidateSelection())
    {
        ComboBox.Focus();
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...