我正在使用 C# VS2008,WinForm 应用程序我的表单上有一个checkedlistbox 控件(win-form 应用程序) 在代码中,我使用SetItemChecked(index, false) 方法检查checkedlistbox 中的一些项目,并引发事件ItemCheck。我还允许用户检查该选中列表框中的项目,并且当用户选中或取消选中某个项目时,它还会引发事件 ItemCheck。如何在 ItemCheck 事件中找到此事件是如何发生的(通过代码或通过用户键盘/鼠标输入)?谢谢。
问问题
803 次
1 回答
2
我认为没有一种简单的方法可以使用代码来区分情况。
唯一想到的是通过使用全局表单变量:
public class Form1:Form
{
bool _isCodeClick = false;
.....
// Somewhere in your code
_isCodeClick = true;
checkedListBox1.SetItemChecked(index, true);
_isCodeClick = false;
.....
private void CheckedListBox1_ItemCheck(Object sender, ItemCheckEventArgs e)
{
if(_isCodeClick == true)
{
// Do processing for click by code
}
else
{
// Do processing for click by user
}
}
}
如果您选择此解决方案,请记住采取额外步骤来正确捕获可能绕过将全局变量重置为 false 状态的异常。
可能使用键盘和鼠标事件的高级操作,您可以找到一种合理的方法来确定导致 ItemCheck 事件的原因,但有时某些解决方案过于复杂且不值得。
编辑:回顾我的回答,我觉得有必要添加一些更改以减少此响应所暗示的维护问题。
设置布尔变量并调用 SetItemChecked 的代码应该封装在这样的单独函数中
private void SetItemCheckedFromCode(int index, bool toSet)
{
try
{
_isCodeClick = true;
checkedListBox1.SetItemChecked(index, true);
}
finally
{
_isCodeClick = false;
}
}
于 2013-01-23T14:32:35.467 回答