Выберите элемент в поле со списком и установите другой текст в поле со списком? - PullRequest
2 голосов
/ 17 января 2012

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

  • По умолчанию - 0
  • Значение 1 - 1
  • Значение 2 - 2

Я хочу, чтобы, когда пользователь выбирает элемент (например, «По умолчанию - 0»), текст ComboBox будет отображать только число «0», а не «По умолчанию - 0».Слово «По умолчанию» является просто информационным текстом.

Я играл со следующими событиями: SelectedIndexChanged, SelectedValueChanged и SelectionChangeCommitted, но мне не удалось изменить текст ComboBox.

private void ModificationCombobox_SelectionChangeCommitted(object sender, EventArgs e)
{
     ComboBox comboBox = (ComboBox)sender; // That cast must not fail.
     if (comboBox.SelectedIndex != -1)
     {
        comboBox.Text = this.values[comboBox.SelectedItem.ToString()].ToString(); // Text is not updated after...
     }
 }

1 Ответ

2 голосов
/ 17 января 2012

Вы можете определить класс для вашего элемента ComboBox, затем создать List<ComboBoxItem> и использовать его в качестве Combobox.DataSource.При этом вы можете установить ComboBox.DisplayMember для свойства, которое вы хотите отобразить, и по-прежнему получать ссылку на ваш объект из ComboBox_SelectedIndexChanged():

class ComboboxItem
{
  public int Value { get; set; }
  public string Description { get; set; }
}

public partial class Form1 : Form
{
  List<ComboboxItem> ComboBoxItems = new List<ComboboxItem>();
  public Form1()
  {
    InitializeComponent();
    ComboBoxItems.Add(new ComboboxItem() { Description = "Default = 0", Value = 0 });
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 1 = 1", Value = 1 });
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 2 = 2", Value = 2 });
    comboBox1.DataSource = ComboBoxItems;
    comboBox1.DisplayMember = "Value";

  }

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  {
    var item = (ComboboxItem)((ComboBox)sender).SelectedItem;
    var test = string.Format("Description is \'{0}\', Value is  \'{1}\'", item.Description, item.Value.ToString());
    MessageBox.Show(test);
  }
}

[править] Если вы хотите изменить отображаемый текст, когда блок переключается между DropDownштаты пытаются это: (это концепция, не знаю, как это будет вести себя)

    private void comboBox1_DropDown(object sender, EventArgs e)
    {
        comboBox1.DisplayMember = "Description";
    }

    private void comboBox1_DropDownClosed(object sender, EventArgs e)
    {
        comboBox1.DisplayMember = "Value";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...