1

我正在使用 C# VS2008,WinForm 应用程序我的表单上有一个checkedlistbox 控件(win-form 应用程序) 在代码中,我使用SetItemChecked(index, false) 方法检查checkedlistbox 中的一些项目,并引发事件ItemCheck。我还允许用户检查该选中列表框中的项目,并且当用户选中或取消选中某个项目时,它还会引发事件 ItemCheck。如何在 ItemCheck 事件中找到此事件是如何发生的(通过代码或通过用户键盘/鼠标输入)?谢谢。

4

1 回答 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 回答