C# 如何在触发事件时传递文本?
从动态checklistbox触发事件时,我需要传递checklistbox的checkeditem。下面提供了带有注释的代码段。。。 我面临着一个相同代码的问题。在鼠标双击事件时,它会抛出一个异常,称为IndexOutfrange。索引值为0时工作正常。请帮助2解决这两个问题C# 如何在触发事件时传递文本?,c#,C#,从动态checklistbox触发事件时,我需要传递checklistbox的checkeditem。下面提供了带有注释的代码段。。。 我面临着一个相同代码的问题。在鼠标双击事件时,它会抛出一个异常,称为IndexOutfrange。索引值为0时工作正常。请帮助2解决这两个问题 private void clbTables_MouseDoubleClick(object sender, MouseEventArgs e) { int indexofselectedtable; i
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
}
private void clbTables\u MouseDoubleClick(对象发送方,MouseEventArgs e)
{
int indexofselectable;
indexofselectedtable=Convert.ToInt32(clbTables.SelectedIndex);
如果(clbTables.CheckedItems.Count!=0)
{
Metadata metadataobj=新元数据(dbProperties);
DBList=metadataobj.GetColumns(clbTables.CheckedItems[indexofselectedtable].ToString());//这会在检查索引>0的项时引发错误。
for(int j=0;j
我想我明白了问题所在,您正在尝试将CheckedListBox的选定索引与CheckedItems集合中的索引相匹配,但没有这样做
考虑一下:您的CheckedListBox中有10项,其中三项已选中。这将为您提供.Items[10]和.CheckedItems[3]。如果双击CheckedListBox中的第7项,则SelectedIndex将为6,但CheckedItems集合中只有三项。因此,当您尝试读取clbTables.CheckedItems[6]时,您将超出该集合的范围。
clbTables.CheckedItems
是另一个集合。您不能使用clbTables。请在其中选择索引
为什么不使用SelectedValue
属性?clbTables.CheckedItems-此属性返回的对象类型是什么。是否可以在checkedlistbox中选中多个项目?如果不是,列表的长度将始终为1,即索引0将是唯一有效的查找。您可能不需要通过SelectedIndex输入…clbTables.CheckedItems返回一个列表。有时我可以检查多个元素。我甚至用相同的代码选择了6个项目。但在两者之间抛出Indexoutofbound异常。我只是将这些项添加到复选框中,因此没有为其指定值。因此,我的selectedvalue始终为空。我怎样才能在使用此代码的同时做到这一点?clbTables.Items.Add(TableList.ElementAt(i));