在组合框中选择一个项目,然后将组合框文本设置为另一个

本文关键字:组合 然后 文本 另一个 项目 设置 选择 一个 | 更新日期: 2023-09-27 18:20:44

我想制作一个ComboBox,用户可以在文本区域中键入一个整数值,但下拉列表包含几个"默认"值。例如,下拉列表中的项目的格式如下:

  • 默认值-0
  • 值1-1
  • 值2-2

我想要的是,当用户选择一个项目(例如"Default-0")时,ComboBox文本将只显示数字"0",而不是"Default-0"。"默认值"只是一个信息文本。

我玩过以下事件:SelectedIndexChangedSelectedValueChangedSelectionChangeCommitted,但我无法更改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...
     }
 }

在组合框中选择一个项目,然后将组合框文本设置为另一个

您可以为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);
  }
}

[编辑]如果你想在框在下拉状态之间嘟嘟作响时更改显示的文本,试试这个:(这是一个概念,不确定它会如何表现)

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