日期:2014-05-18  浏览次数:21040 次

这个关于ListBox的操作为什么会报错?
[code=C#][/code]
public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  listBox1.DisplayMember = "UserID";
listBox1.ValueMember = "Name";
  }
  private void button1_Click(object sender, EventArgs e)
  {
  listBox1.Items.Add(new Class1() { UserID = 1, Name = "A" });
  listBox1.Items.Add(new Class1() { UserID = 2, Name = "B" });
  listBox1.Items.Add(new Class1() { UserID = 3, Name = "C" });
  }
  private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
  {
  if (listBox1.SelectedIndex != -1)
  {
  textBox1.Text = listBox1.SelectedValue.ToString(); //未将对象引用设置到对象的实例
  }
  }
  }
 class Class1
  {  
  public int UserID { get; set; }
  public string Name { get; set; }  
  }

上面的代码,为什么会报错呢?----未将对象引用设置到对象的实例
我设置了DisplayMember属性的值和ValueMember属性的值,为什么报错呢?

------解决方案--------------------
哥哥你还没绑定数据源,指定那两属性有什么用啊??
------解决方案--------------------
因为在ListBox初始化的时候,就会自动触发一次SelectedChanged事件。

你在事件中需要对ListBox的空与否进行判断。
------解决方案--------------------
listBox1.SelectedValue改为listBox1.SelectedItem
------解决方案--------------------
不是所有的控件都需要绑定数据源的。少年们。
不要束缚lz的各种想法。

只要把原理给lz就好了。
------解决方案--------------------
探讨

因为在ListBox初始化的时候,就会自动触发一次SelectedChanged事件。

你在事件中需要对ListBox的空与否进行判断。

------解决方案--------------------
探讨

如果绑定的话,初始化的时候就不会触发;不是绑定的话,要触发的

------解决方案--------------------
刚试了下,绑定数据后也会报错,是不是那个类写错了?到底是哪的问题?
------解决方案--------------------
listBox1.Items.Add(new Class1() { UserID = 1, Name = "A" });
 这行代码是这么加么? 为什么后面的listBox1.SelectedValue为null?
------解决方案--------------------
高手们 你们谁调试个能用的代码出来贴一下吧 顺便学习一下 以前用Add方法从来就没这么用过
------解决方案--------------------
我说的lz爱信不信。

还有,最起码的,在用一个对象的属性的时候,都要先判定对象的空与否吧。
------解决方案--------------------

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

list.Add(new Class1());
list.Add(new Class1());
list.Add(new Class1());
list.Add(new Class1());
listBox1.DataSource=list;
 
------解决方案--------------------
将代码改一下,就可以了。
   private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
Class1 class1 = listBox1.SelectedItem as Class1;
textBox1.Text = class1.Name; 
}
}
------解决方案--------------------
探讨

将代码改一下,就可以了。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)