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

时间:2011-03-12 04:07:28

标签: c#

我需要在从动态核对表框中触发事件时传递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
}

2 个答案:

答案 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属性?