我整理了以下代码来演示我遇到的问题。
这是一个只有组合框的表单,在加载方法中使用从 LINQ 生成的数组填充组合框。
它设置了 DisplayMember 和 ValueMember。显示成员按预期工作 - 它显示数字列表。但是,如评论所述,SelectedValue 为空。
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DisplayMember = "Number";
comboBox1.ValueMember = "Square";
var it = from n in new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
select new NumberAndSquare(n);
comboBox1.Items.AddRange(it.ToArray());
}
private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
ComboBox combo = sender as ComboBox;
MessageBox.Show(combo.SelectedItem.ToString()); //works as expected
MessageBox.Show(combo.SelectedValue.ToString()); //throws null reference exception
}
class NumberAndSquare
{
public NumberAndSquare(int number)
{
Number = number;
}
public int Number
{ get; set; }
public int Square
{
get
{
return Number*Number;
}
}
public override String ToString()
{
return string.Format("{0}: {1}", Number, Square);
}
}
我做错了什么?
最佳答案
SelectedValue
在这种情况下无疑是 null
,因为没有任何内容绑定(bind)到它。据我所知,DataMember
/ValueMember
属性仅在您将 DataSource
绑定(bind)到您的组合框(您不是)时使用。例如,如果您将代码更改为:
var it = from n in new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
select new NumberAndSquare(n);
comboBox1.DataSource = it.ToList();
comboBox1.DisplayMember = "Number";
comboBox1.ValueMember = "Square";
它应该工作
关于c# - ComboBox.SelectedValue 抛出空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379183/