从支出点到收入,弹出错误如上图 private void rdoExpenditure_CheckedChanged(object sender, EventArgs e)
        {
            cboCatogory.Items.Clear();
            if(rdoExpenditure.Checked == true)
            {
                cboCatogory.Items.Add("生活消费");
                cboCatogory.Items.Add("固定资产");
                cboCatogory.Items.Add("休闲娱乐");
            }
            else
            {
                cboCatogory.Items.Add("工作收入");
                cboCatogory.Items.Add("投资收益");
                cboCatogory.Items.Add("其他收入");
            }
            cboCatogory.SelectedIndex = 0;
        }
cboCatogory是收支类别的组合框,具体Item由收支类型决定。代码跟书上的一样,不知道为什么会出错,请大神指点,谢谢。

解决方案 »

  1.   

       
                if(rdoExpenditure.Checked == true)
                {
                    cboCatogory.Items.Add("生活消费");
                    cboCatogory.Items.Add("固定资产");
                    cboCatogory.Items.Add("休闲娱乐");
                }
                else
                {
                    cboCatogory.Items.Add("工作收入");
                    cboCatogory.Items.Add("投资收益");
                    cboCatogory.Items.Add("其他收入");
                }
                cboCatogory.SelectedIndex = 0;
    這樣子試試
      

  2.   

    你检查一下 cboCatogory 是否有 SelectedIndexChange 事件。cboCatogory.Items.Clear() 这句会引发 SelectedIndexChange 事件,而 SelectedIndexChange 事件如果有代码使用 cboCatogory.Items[0]则会引发异常(因为所有条目 Clear 掉了,没有索引为 0 的项了)。
      

  3.   

    cboCatogory是有selectedIndexChange事件,可是里面没用到Items[0],还是不明白为什么出错,代码如下:        private void cboCatogory_SelectedIndexChanged(object sender, EventArgs e)
            {
                
                if(cboCatogory.Items.Count > 0)
                {
                    listBox1.Items.Clear();
                    switch (cboCatogory.Items.ToString())
                    {
                        case "生活消费":
                            listBox1.Items.Add("吃");
                            listBox1.Items.Add("喝");
                            break;
                        case "工作收入":
                            listBox1.Items.Add("正常工资");
                            listBox1.Items.Add("奖金");
                            break;
                    }
                    listBox1.SelectedIndex = 0;
                }
            }        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {        }
      

  4.   

    项目选debug模式,在调试模式想让他报错再截图看看吧,可能不是你说的位置报错
      

  5.   


    本来就是debug模式的
      

  6.   


    listBox1.Items.Clear();
    //问题在这里 这个得到的不是选中项
    //而是所有选项的集合 直接ToString并不能进入到switch里
    //改成SelectedItem即可
    //comboBox1.Items.ToString()
    switch (comboBox1.SelectedItem.ToString())
    {
        case "生活消费":
            listBox1.Items.Add("吃");
            listBox1.Items.Add("喝");
            break;
        case "工作收入":
            listBox1.Items.Add("正常工资");
            listBox1.Items.Add("奖金");
            break;
    }
    listBox1.SelectedIndex = 0;
      

  7.   

    是的,是listbox出错,原因上面已经有说了
      

  8.   

    switch 里面的case判断没进, 导致你先clear了集合 然后去 listBox1.SelectedIndex = 0; 自然要报错
      

  9.   

    绑定数据问题你最好用 DataSource 属性来赋值数据, Items.Add 再绑定上不太一样。因为数据绑定没有触发,所以就 出错了