4

我想将一些项目添加到这样的组合框中:

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

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

ComboboxItem item = new ComboboxItem();
item.Text = "choose a server...";
item.Value = "-1";
ComboBox_Servers.Items.Add(item);
...   

并像这样阅读这些文本和值SelectedIndexChanged

private void ComboBox_Servers_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show(ComboBox_Servers.SelectedValue.ToString());
}

但 SelectedValue 始终为空!有什么问题,我该如何解决?

4

5 回答 5

8

您可以使用SelectedItem并将其转换回您的class并访问其properties.

 MessageBox.Show(((ComboboxItem)ComboBox_Countries_In_Silvers.SelectedItem).Value);

编辑您可以尝试使用 DataTextField 和 DataValueField,我将它与 DataSource 一起使用。

ComboBox_Servers.DataTextField = "Text";
ComboBox_Servers.DataValueField = "Value";
于 2013-04-03T06:43:57.343 回答
5

试试这个:

ComboBox cbx = new ComboBox();
cbx.DisplayMember = "Text";
cbx.ValueMember = "Value";

编辑(有点解释,对不起,我也没有注意到你的组合框没有绑定,我责怪缺乏咖啡因):

SelectedValue 和 SelectedItem 之间的区别在这里解释得很好:ComboBox SelectedItem vs SelectedValue

因此,如果您的组合框未绑定到数据源,DisplayMember 和 ValueMember 不会做任何事情,并且 SelectedValue 将始终为 null,则不会调用 SelectedValueChanged。所以要么绑定你的组合框:

            comboBox1.DisplayMember = "Text";
            comboBox1.ValueMember = "Value";

            List<ComboboxItem> list = new List<ComboboxItem>();

            ComboboxItem item = new ComboboxItem();
            item.Text = "choose a server...";
            item.Value = "-1";
            list.Add(item);

            item = new ComboboxItem();
            item.Text = "S1";
            item.Value = "1";
            list.Add(item);

            item = new ComboboxItem();
            item.Text = "S2";
            item.Value = "2";
            list.Add(item);

            cbx.DataSource = list; // bind combobox to a datasource

或使用 SelectedItem 属性:

if (cbx.SelectedItem != null)
             Console.WriteLine("ITEM: "+comboBox1.SelectedItem.ToString());
于 2013-04-03T06:46:00.570 回答
4
Dictionary<int,string> comboSource = new Dictionary<int,string>();
comboSource.Add(1, "Sunday");
comboSource.Add(2, "Monday");

将值添加到 后Dictionary,将其用作combobox数据源:

comboBox1.DataSource = new BindingSource(comboSource, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
于 2014-10-31T05:55:00.663 回答
2

这类似于其他一些答案,但如果您已经有一个列表,则它很紧凑并且可以避免转换为字典。

给定ComboBoxWindows 窗体上的“组合框”和SomeClass具有stringtype 属性的类Name

List<SomeClass> list = new List<SomeClass>();

combobox.DisplayMember = "Name";
combobox.DataSource = list;

这意味着这combobox.SelectedItem是一个SomeClass来自的对象list,并且其中的每个项目combobox都将使用其属性显示Name

您可以使用

SomeClass someClass = (SomeClass)combobox.SelectedItem;
于 2016-04-06T19:26:37.073 回答
0
        combo1.DisplayMember = "Text";
        combo1.ValueMember = "Value";   
        combo1.Items.Add(new { Text = "someText"), Value = "someValue") });
        dynamic item = combo1.Items[combo1.SelectedIndex];
        var itemValue = item.Value;
        var itemText = item.Text;

不幸的是“combo1.SelectedValue”不起作用,我不想将我的组合框与任何来源绑定,所以我想出了这个解决方案。也许它会帮助某人。

于 2015-09-22T08:49:44.327 回答