C# 如何在触发事件时传递文本?

C# 如何在触发事件时传递文本?,c#,C#,从动态checklistbox触发事件时,我需要传递checklistbox的checkeditem。下面提供了带有注释的代码段。。。 我面临着一个相同代码的问题。在鼠标双击事件时,它会抛出一个异常,称为IndexOutfrange。索引值为0时工作正常。请帮助2解决这两个问题 private void clbTables_MouseDoubleClick(object sender, MouseEventArgs e) { int indexofselectedtable; i

从动态checklistbox触发事件时,我需要传递checklistbox的checkeditem。下面提供了带有注释的代码段。。。 我面临着一个相同代码的问题。在鼠标双击事件时,它会抛出一个异常,称为IndexOutfrange。索引值为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
}
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));