我有一个简单的组合框,其中包含一些值/文本项。我使用 ComboBox.DisplayMember 和 ComboBox.ValueMember 来正确设置值/文本。当我尝试获取该值时,它返回一个空字符串。这是我的代码:
表单加载事件:
cbPlayer1.ValueMember = "Value";
cbPlayer1.DisplayMember = "Text";
ComboBox事件的SelectIndexChanged:
cbPlayer1.Items.Add(new { Value = "3", Text = "This should have a value of 3" });
MessageBox.Show(cbPlayer1.SelectedValue+"");
它返回一个空对话框。我也尝试了 ComboBox.SelectedItem.Value (VS 看到的,参见图片),但它无法编译:
'object' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
我究竟做错了什么?
不确定 ComboBox.SelectedValue 是什么意思,它有一个 SelectedItem 属性。当您添加项目时不会设置该值,只有当用户进行选择时才会设置。
Items 属性是 System.Object 的集合。这允许组合框存储和显示任何类型的类对象。但是您必须将其从对象转换为类类型才能在代码中使用所选对象。这在你的情况下不起作用,你添加了一个匿名类型的对象。您需要声明一个小帮助器类来存储 Value 和 Text 属性。一些示例代码:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
comboBox1.Items.Add(new Item(1, "one"));
comboBox1.Items.Add(new Item(2, "two"));
comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
Item item = comboBox1.Items[comboBox1.SelectedIndex] as Item;
MessageBox.Show(item.Value.ToString());
}
private class Item {
public Item(int value, string text) { Value = value; Text = text; }
public int Value { get; set; }
public string Text { get; set; }
public override string ToString() { return Text; }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)