gpt4 book ai didi

c# - 管理 CheckedListBox ItemCheck 事件以在检查项目之后而不是之前运行

转载 作者:太空狗 更新时间:2023-10-30 00:07:05 29 4
gpt4 key购买 nike

我在 C# 窗口窗体应用程序中使用 CheckedListBox

我想在一项选中或取消选中后执行某些操作,但 ItemCheck 事件在该项选中/取消选中之前运行。我该怎么做?

最佳答案

CheckedListBox.ItemCheck Event

The check state is not updated until after the ItemCheck event occurs.

要在检查项目后运行一些代码,您应该使用变通方法。

最佳选择

你可以使用这个选项(感谢 Hans Passant 为这个 post ):

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
this.BeginInvoke(new Action(() =>
{
//Do the after check tasks here
}));
}

另一种选择

  • 如果在 ItemCheck 事件中间,您需要知道项目的状态,您应该使用 e.NewValue 而不是使用 checkedListBox1.GetItemChecked(i)

  • 如果您需要将检查索引列表传递给方法,请执行以下操作:

使用代码:

var checkedIndices = this.checkedListBox1.CheckedIndices.Cast<int>().ToList();
if (e.NewValue == CheckState.Checked)
checkedIndices.Add(e.Index);
else
if(checkedIndices.Contains(e.Index))
checkedIndices.Remove(e.Index);

//now you can do what you need to checkedIndices
//Here if after check but you should use the local variable checkedIndices
//to find checked indices

另一种选择

在 ItemCheck 事件中间,删除 ItemCheck 的处理程序,SetItemCheckState,然后重新添加处理程序。

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
var control = (CheckedListBox)sender;
// Remove handler
control.ItemCheck -= checkedListBox_ItemCheck;

control.SetItemCheckState(e.Index, e.NewValue);

// Add handler again
control.ItemCheck += checkedListBox_ItemCheck;

//Here is After Check, do additional stuff here
}

关于c# - 管理 CheckedListBox ItemCheck 事件以在检查项目之后而不是之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com