我需要在从动态核对表框中触发事件时传递checklistbox的checkitem。代码段在下面提供了评论...... 我遇到了同一段代码的问题。在鼠标双击事件上它抛出一个异常说IndexoutofRange。它的工作正常,索引值为0.请帮助2解决我。
private void clbTables_MouseDoubleClick(object sender, MouseEventArgs e)
{
int indexofselectedtable;
indexofselectedtable = Convert.ToInt32(clbTables.SelectedIndex);
if (clbTables.CheckedItems.Count != 0)
{
Metadata metadataobj = new Metadata(dbProperties);
DBList = metadataobj.GetColumns(clbTables.CheckedItems[indexofselectedtable].ToString()); // This throws an error on checking an item of index>0.
for (int j = 0; j < DBList.Count; j++)
{
chklistcolumns.Name = "chklist" + j++;
chklistcolumns.Items.Add(DBList.ElementAt(j));
}
this.Controls.Add(chklistcolumns);
chklistcolumns.ItemCheck += new ItemCheckEventHandler(OnCheckListBoxItemCheck);
}
}
private void OnCheckListBoxItemCheck(object sender, ItemCheckEventArgs args) //need to pass the tablename which can be got from the object clbTables
{
Columns columnobj = new Columns();
columnobj.ColumnName = this.Text;
columnobj.Id = this.Name;
columnobj.TableName= // need to get the tablename from the object clbtables
}
答案 0 :(得分:0)
我想我知道这里的问题是什么,你试图将CheckedListBox的选定索引与CheckedItems集合中的索引相匹配,但它不会那样工作。
考虑一下:CheckedListBox中有10个项目,其中三个项目已经过检查。这给你.Items [10]和.CheckedItems [3]。如果那时你双击CheckedListBox中的第7个项目,你的SelectedIndex将是6,但CheckedItems集合中只有三个项目。因此,当您尝试阅读clbTables.CheckedItems [6]时,您将超出该集合的范围。
答案 1 :(得分:0)
clbTables.CheckedItems
是另一个集合。您不能在其中使用clbTables.SelectedIndex
。
为什么不使用SelectedValue
属性?