【问题标题】:How do I identify the selected ComboBox's Item relating it to a set of data?如何识别与一组数据相关的选定 ComboBox 项?
【发布时间】:2017-08-06 17:01:25
【问题描述】:

假设我有一组固定的标识符,例如字典。

public static Dictionary<int, string> clientIds = new Dictionary<int, string>()
{
    { 0, "aa" },
    { 1, "ab"  },
    { 2, "ac" },
    { 3, "ba" },
    { 4, "bb" }
};

然后,我在运行时动态添加与这些标识符相关的ComboBox“友好名称”(但我不知道会添加哪些。

clientIdCombo.Add(friendlyName);

假设在索引 0 处添加了友好名称“Alpha Beta”。这将与“ab”标识符有关。我如何知道用户选择了“ab”标识符,而不必根据组合上显示给用户的文本进行条件处理?我尝试改用BindingList,但这也只为我提供了显示的文本。

听起来很简单——如何将基础数据添加到每个ComboBox 索引?尽管欢迎多种解决方案,但最简单的方法会更可取。

谢谢。

【问题讨论】:

标签: c# winforms combobox


【解决方案1】:

ComboBox 项目可以是您喜欢的任何类型,项目的显示名称将由该类型的 ToString 方法定义。

这意味着您可以像这样定义您的项目类型:

class ClientItem
{
    public int Index;
    public string Id;
    public string FriendlyName;
    public override string ToString()
    {
        return FriendlyName;
    }
}

然后用这个类的实例填充你的组合框。

comboBox.Items.Add(new ClientItem { 
    Index = 1,
    Id = "ab",
    FriendlyName = "Alpha Beta",
});

然后您可以使用组合框项目访问所有项目的数据。只记得投射到特定的项目类型:

var client = comboBox.SelectedItem as ClientItem;
MessageBox.Show(client.Id + ": " + client.FriendlyName);

【讨论】:

  • 很好的解决方案,谢谢。或者,是否可以简单地将 ComboBox.DisplayMember 和 ComboBox.ValueMember 分配给通用变量?
【解决方案2】:

只需向 ComboBox 添加与数组中一样多的项,每个项都有其对应的文本,并且与它们在数组中的顺序相同。然后,当您想从数组中获取选定项时,使用ComboBox.SelectedIndex 获取选定索引并从数组中获取与该索引对应的项。在您的情况下,您使用的是 int-indexed 字典,它在索引方面就像一个数组。

TLDR:

string[] array = new[] { "aa", "ab", "ac" };

//This array is "equivalent" to
Dictionary<int, string> dic= new Dictionary<int, string>()
{
    { 0, "aa" },
    { 1, "ab" },
    { 2, "ac" },
};

//Add the items to your ComboBox, for simplicity let's use this
ComboBox.Items.Add("Alfa Alfa");
ComboBox.Items.Add("Alfa Bravo");
ComboBox.Items.Add("Alfa Charlie");

//Later, when retrieving the selected item
int selIndex = ComboBox.SelectedIndex;
string selItem = array[selIndex];

【讨论】:

  • 这是一种方法,以防您确定将所有项目添加到 ComboBox 上。在我的场景中,我不知道会添加哪个,例如可能不会添加“Alfa Alfa”,但直到运行时我才会知道,这使得仅基于 SelectedIndex 的检索是不可能的。
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2019-02-04
  • 1970-01-01
  • 2023-03-16
  • 2022-11-24
相关资源
最近更新 更多