新手提问:C#Winform,改变选中的单选框选项时,显示InvalidArgument = "0" 对于SelectedIndex无效

桐轩 2019-08-12 10:42:07



从支出点到收入,弹出错误如上图

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由收支类型决定。代码跟书上的一样,不知道为什么会出错,请大神指点,谢谢。
...全文
407 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2019-08-14
  • 打赏
  • 举报
回复
绑定数据问题 你最好用 DataSource 属性来赋值数据, Items.Add 再绑定上不太一样。因为数据绑定没有触发,所以就 出错了
  • 打赏
  • 举报
回复
switch 里面的case判断没进, 导致你先clear了集合 然后去 listBox1.SelectedIndex = 0; 自然要报错
桐轩 2019-08-13
  • 打赏
  • 举报
回复
引用 8 楼 f**kcsdn 的回复:

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;
是的!我没注意到,谢谢!
hztltgg 2019-08-13
  • 打赏
  • 举报
回复
是的,是listbox出错,原因上面已经有说了
桐轩 2019-08-13
  • 打赏
  • 举报
回复
引用 7 楼 hztltgg 的回复:
你这是编译没通过,运行的是之前编译的代码吧?
请问这样呢?
csdnFUCKINGSUCKS 2019-08-13
  • 打赏
  • 举报
回复

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;
hztltgg 2019-08-13
  • 打赏
  • 举报
回复
你这是编译没通过,运行的是之前编译的代码吧?
桐轩 2019-08-13
  • 打赏
  • 举报
回复
引用 5 楼 hztltgg 的回复:
项目选debug模式,在调试模式想让他报错再截图看看吧,可能不是你说的位置报错
本来就是debug模式的
hztltgg 2019-08-13
  • 打赏
  • 举报
回复
项目选debug模式,在调试模式想让他报错再截图看看吧,可能不是你说的位置报错
桐轩 2019-08-13
  • 打赏
  • 举报
回复
引用 1 楼 ManBOyyy 的回复:
   
            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;
這樣子試試
还是不行
桐轩 2019-08-13
  • 打赏
  • 举报
回复
引用 2 楼 datafansbj 的回复:
你检查一下 cboCatogory 是否有 SelectedIndexChange 事件。cboCatogory.Items.Clear() 这句会引发 SelectedIndexChange 事件,而 SelectedIndexChange 事件如果有代码使用 cboCatogory.Items[0]则会引发异常(因为所有条目 Clear 掉了,没有索引为 0 的项了)。
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)
        {

        }
datafansbj 2019-08-13
  • 打赏
  • 举报
回复
你检查一下 cboCatogory 是否有 SelectedIndexChange 事件。cboCatogory.Items.Clear() 这句会引发 SelectedIndexChange 事件,而 SelectedIndexChange 事件如果有代码使用 cboCatogory.Items[0]则会引发异常(因为所有条目 Clear 掉了,没有索引为 0 的项了)。
ManBOyyy 2019-08-13
  • 打赏
  • 举报
回复
   
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;

這樣子試試

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧