在学校内部编程方面需要帮助

时间:2018-04-09 06:15:04

标签: c# combobox

我有两个名为standardscredits的列表。 standards列表已添加到ComboBox。当我点击ComboBox中的某个项目时,我希望能够在credits列表中显示某个项目。例如,我单击ComboBox中的第一个索引,我想在credits列表的第一个项目中显示项目。我有这个代码,但它给了我一个我无法解决的错误。这是我得到的错误:

  

System.ArgumentOutOfRangeException

来自这行代码

lblCredits.Text = credits.ElementAt(standard.IndexOf(cboStandard1.Text))

-

    private void cboStandard1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboStandard1.SelectedIndex + 1 > 0)
        {
            lblCredits.Text = credits.ElementAt(standard.IndexOf(cboStandard1.Text));
        }
    }

这表明我的列表长度相同

    private void standardlist()
    {





        standard.Add("91632");
        standard.Add("91633");
        standard.Add("91634");
        standard.Add("91635");


        cboStandard1.DataSource = standard;

        ((ComboBox)cboStandard1).SelectedIndex = -1;

        credits.Add("4");
        credits.Add("6");
        credits.Add("4");
        credits.Add("4");



    }

1 个答案:

答案 0 :(得分:1)

就像我说的那样,绑定ComboBox,即设置其DataSource属性,默认会选择第一个项目,这会引发SelectedIndexChanged事件,这将执行您的代码。这一切都发生在您填充credits列表之前,这就是它不包含任何项目的原因。你可以做两件事,你可以选择同时做两件事:

  1. 在设置credits的{​​{1}}之前填充DataSource列表。
  2. 处理ComboBox事件而不是SelectionChangeCommitted
  3. 仅当用户通过用户界面选择项目时才会引发SelectedIndexChanged事件,因此在绑定数据然后重置SelectionChangeCommitted时不会引发SelectedIndexSelectedIndexChanged将被提升两次。即使您确实实施了选项1,第二个SelectedIndexChanged事件仍然存在问题,因为您将-1传递给ElementAt,因此您将获得ArgumentOutOfRangeException抛出。