public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();    
        }
        List<Class1> list = new List<Class1>();
        private void button1_Click(object sender, EventArgs e)
        {            #region list.Add()            
            list.Add(new Class1() { UserID = 1, Name = "A" });
            list.Add(new Class1() { UserID = 2, Name = "B" });
            list.Add(new Class1() { UserID = 3, Name = "C" });
            #endregion 
            listBox1.DisplayMember = "Name";
            listBox1.ValueMember = "UserID";
            listBox1.DataSource = list;
            #region MyRegion
            //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" }); 
            #endregion
        }
        
        private void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex!=-1)//为什么删除这个判断后会报错呢?
            {
                 textBox1.Text = listBox1.SelectedValue.ToString();
            }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            textBox1.Text=listBox1.SelectedValue.ToString();//这种却不会报错。
        }
        }

解决方案 »

  1.   

    class Class1
        {
            public int UserID { get; set; }
            public string Name { get; set; }    }
      

  2.   


       public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();    
            }
            List<Class1> list = new List<Class1>();
            private void button1_Click(object sender, EventArgs e)
            {            #region list.Add()            
                list.Add(new Class1() { UserID = 1, Name = "A" });
                list.Add(new Class1() { UserID = 2, Name = "B" });
                list.Add(new Class1() { UserID = 3, Name = "C" });
                #endregion 
                listBox1.DisplayMember = "Name";
                listBox1.ValueMember = "UserID";
                listBox1.DataSource = list;
            }
            
            private void listBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (listBox1.SelectedIndex!=-1)//为什么删除这个判断后会报错呢?
                {
                     textBox1.Text = listBox1.SelectedValue.ToString();
                }
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                textBox1.Text=listBox1.SelectedValue.ToString();//这种却不会报错。
            }
        } 
           class Class1
        {
            public int UserID { get; set; }
            public string Name { get; set; }    }
      

  3.   

    listBox1_SelectedValueChanged和listBox1_SelectedIndexChanged,你需要仔细对比一下这两个事件的区别
      

  4.   

    private void listBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (listBox1.SelectedIndex!=-1)//为什么删除这个判断后会报错呢?
                {
                     textBox1.Text = listBox1.SelectedValue.ToString();
                }
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                textBox1.Text=listBox1.SelectedValue.ToString();//这种却不会报错。
            }
            }
    你的代码,括号怎么是包起来的额?
    你说的把if去掉,就和第二个是一样的啊。那怎么说第一个报错,第二个不报错呢
      

  5.   


       private void listBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (listBox1.SelectedIndex!=-1)//为什么删除这个判断后会报错呢?
                {
                     textBox1.Text = listBox1.SelectedValue.ToString();
                }
            }缺个括号
      

  6.   

    listBox1.SelectedValue == null的时候,当然调用不了null.tostring()
      

  7.   

    删除后listBox1.SelectedValue的值可能为空
     textBox1.Text = listBox1.SelectedValue.ToString();这一步如果listBox1.SelectedValue为空就会出错
      

  8.   

    这是为了防止你点到标题栏的时候报错的,第一行的index为0,标题栏的index为-1
      

  9.   


                if (listBox1.SelectedIndex!=-1)//为什么删除这个判断后会报错呢?
                {
                     textBox1.Text = listBox1.SelectedValue.ToString();
                }
    //可以改成:
    textBox1.Text = listBox1.SelectedValue??listBox1.SelectedValue.ToString();
      

  10.   

    一个是值改变,一个是index改变,你加载窗体时会触发值改变时间,但你没选择数据,所以SelectedValue为null,会报未将对象引用到实例
      

  11.   

    应该是  listBox1 没有赋值
      

  12.   

    null. tostring