Изменить текстовое поле ComboBox, когда элемент выбран из раскрывающегося списка? - PullRequest
3 голосов
/ 09 сентября 2011

У меня есть ComboBox на форме.Свойство DropDownStyle ComboBox установлено на DropDown, так что пользователь может выбрать элемент из раскрывающегося списка или ввести текст вручную.

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

101 Cat
102 Dog
103 Bird

Когда выбран один из этих элементов, я бы хотел толькоописание, которое появится в текстовом поле ComboBox.Поэтому, когда выбран «102 Dog», строка «Dog» должна отображаться в текстовом поле, готовая к редактированию пользователем, и элементы в выпадающем списке должны быть неизменными.

Я думалЯ мог бы просто прослушать, скажем, событие SelectionChangeCommitted ComboBox и установить для свойства Text ComboBox то, что мне нравится.Но если я сделаю это, изменения, которые я внесу в Text, будут проигнорированы, и вся строка («102 Dog») все еще будет отображаться в ComboBox.1015 * поле в -1, чтобы указать ComboBox, что настройка Text I'm не является пунктом в раскрывающемся списке.Но это просто полностью очищает текстовое поле, независимо от того, что я изменяю свойство Text на

Итак, я решил, что SelectionChangedCommitted - это неправильное событие, которое нужно использовать, так как оно возникает слишком ранодля моих целей (кажется, что свойство Text обновляется только моим выбором после того, как обработчик события SelectionChangeCommitted завершен).Но все другие события ComboBox также не работают, включая SelectedIndexChanged и DropDownClosed.

Я думал, что это будет довольно тривиально для достижения.Должен быть простой способ сделать это, и я уверен, что упускаю что-то очевидное ... есть идеи?

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Вы можете попробовать это:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  if (comboBox1.SelectedIndex > -1)
  {
    string value = comboBox1.Items[comboBox1.SelectedIndex].ToString().Substring(4);
    this.BeginInvoke((MethodInvoker)delegate { this.comboBox1.Text = value; });
  }
}
0 голосов
/ 10 сентября 2011

Просто чтобы уточнить, вы выводите «101 Cat», «102 Dog» и т. Д., Когда пользователь выпадает из выпадающего списка, и отображает их при выборе? Является ли 101 ключ для «кошки», 102 - для «собаки» и так далее? Если да, то почему вы их отображаете, а не только показывает текст каждого элемента (если это ваше требование, извините за мой ответ). Насколько я понимаю, я настрою значение в поле со списком для свойства, которое возвращает вам 101, 102 и т. Д., А для элемента отображения - свойство, которое возвращает вам текст каждого элемента. Таким образом, вы уже получите то, что хотите, т.е. отобразите текст «Кошка», «Собака» и «Птица». Кроме того, вы можете прикрепить событие к событию TextChanged комбо, если вам нужна дополнительная обработка.

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