我是 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() + ".");
}
答案 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()
,在选择项目时使用空格键,或用鼠标单击复选框部分。