获取checkedListbox中选中项的索引和名称

时间:2021-03-10 15:52:37

标签: c#

我是 winForms 的新手。我正在尝试制作一个应用程序,其中有一个项目清单,当用户检查一个项目时,会出现一条消息,显示已检查项目的索引和名称。

这是我到目前为止所写的内容,但问题是当我选择第一个项目时什么也没有发生,当我选择另一个项目时我会看到前一个等等。

 void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
        {
         foreach (object itemChecked in checkedListBox1.CheckedItems)
        {

            
            MessageBox.Show("Item with title: \"" + itemChecked.ToString() +
                            "\", is checked. Checked state is: " +
                            checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
         }

3 个答案:

答案 0 :(得分:3)

可以得到ItemCheckEventArgs e中选中的索引,就像这样:

int Index =  e.Index ;

答案 1 :(得分:3)

如果您查看 Remarks on CheckedListBox.ItemChecked,它会说明

<块引用>

直到 ItemCheck 事件发生后才会更新检查状态。

当您检查 CheckedListBox 中的第一项时,您的事件会触发,但该项的检查状态尚未更新。因此,checkedListBox1.CheckedItems 中没有项目,因此没有显示消息框。

当您检查第二个项目时,checkedListBox1.CheckedItems 中唯一的项目是您之前检查过的项目。所以,这就是显示的那个。

我从问题中假设您只想显示其检查状态正在被修改的项目。如果是这样,您可以使用 ItemCheckEventArgs 来获取您需要的信息。

void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    MessageBox.Show("Item with title \"" + checkedListBox1.Items[e.Index].ToString() + 
"\" was checked. The new check state is " + e.NewValue.ToString();
}

答案 2 :(得分:2)

如果你只想知道一个项目何时被检查过,那么使用这样的代码:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked)
    {
        String item = checkedListBox1.Items[e.Index].ToString();
        Console.WriteLine("Index " + e.Index + " checked: " + item);
    }
}

无论项目是如何检查的,这都将起作用;通过 SetItemChecked(),在选择项目时使用空格键,或用鼠标单击复选框部分。