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



我是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() + ".");
}

如果你查看关于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();
}

您可以在ItemCheckEventArgs e中获得选定的索引,就像这样:

int Index =  e.Index ;

如果您只想知道某项是否已被检查过,那么可以使用如下代码:

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(),在选中项目时使用空格键,或用鼠标单击复选框部分。

最新更新