我有两个名为standards
和credits
的列表。 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");
}
答案 0 :(得分:1)
就像我说的那样,绑定ComboBox
,即设置其DataSource
属性,默认会选择第一个项目,这会引发SelectedIndexChanged
事件,这将执行您的代码。这一切都发生在您填充credits
列表之前,这就是它不包含任何项目的原因。你可以做两件事,你可以选择同时做两件事:
credits
的{{1}}之前填充DataSource
列表。ComboBox
事件而不是SelectionChangeCommitted
。仅当用户通过用户界面选择项目时才会引发SelectedIndexChanged
事件,因此在绑定数据然后重置SelectionChangeCommitted
时不会引发SelectedIndex
,SelectedIndexChanged
将被提升两次。即使您确实实施了选项1,第二个SelectedIndexChanged
事件仍然存在问题,因为您将-1传递给ElementAt
,因此您将获得ArgumentOutOfRangeException
抛出。