测试了一下 确实是存在这个问题 你自己写checkbox 的鼠标点击触发过程
让它up 和 down 都在那个小方框上才有效~· 这样子应该可以~·

解决方案 »

  1.   

    谢谢回复,再请问使用过程中发现如果能将checkbox和listviewitem的选中状态分开,用户体验会更好可不可以listview中新加入一个item的时候,自动在窗体上生成一个单独的checkbox,然后将两者的选中状态绑定起来现在的问题是我还不会这样的动态生成控件,烦请提供一个sample,再次感谢!
      

  2.   

    在csdn的下载里面找“c#实例精选!”这个下载
    例子10不知道可以解决你的问题不?
    顺便给你帮忙顶一下
      

  3.   

    你可以在selected事件里面设置checkbox的状态
    其中checked设为false
    试试
    应该可以
      

  4.   

    这个的确是个问题,表现的现象为党单选的时候(鼠标单击)不存在你现在这个问题,只有当多选的时候就有你说的这个问题了。
    这个问题是由于这个listview控件本身的缺陷造成的。我2个月前也遇到你目前的问题,不过我解决了。需要一些work around.首先要你要想一下在listview上面多选,用户怎样操作,一般让用户实现多选,用户至少需要按下Shift 或者 Ctrl键。
    因此我们就可以用这个事件入手,解决你的这个问题。解决步骤如下。
    1.在你的这个form中加入一个全局变量:
    private bool isMultipleSelecting = false; //初始设置为false2.让你的listview 捕获如下2个键盘事件,用于标记开始多选和结束多选private void lstvwImage_KeyDown(object sender, KeyEventArgs e)
    {
      this.isMultipleSelecting = (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.ControlKey);
    }private void lstvwImage_KeyUp(object sender, KeyEventArgs e)
    {
      this.isMultipleSelecting = !(e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.ControlKey);

    3.让你的ListView捕获ItemCheck事件,这里我用了黑体表示,主要是不要把这个事件和另外一个事件ItemChecked搞错。ItemCheck是发生在Checkbox要改变状态但是还没真正改变的时候,而ItemChecked是改变了以后发生的事件。这点在于解决这个问题上非常重要。因为只有在ItemCheck这个事件的ItemCheckEventArgs的参数中,我们可以同时获得这个即将改变状态的checkbox当前的状态和即将要改变的状态。并且我们可以修改这个即将要改变的状态。代码如下:private void lstvwImage_ItemCheck(object sender, ItemCheckEventArgs e)
    {
       if (true == this.isMultipleSelecting)
       {
          e.NewValue = e.CurrentValue;
          return;
       }
    }从上面的代码很容易看出,当用户正在多选时候,e.NewValue 永远被付值成了e.CurrentValue,从而达到了你的目的。
    如果,你的listview 支持双击的话,那么你会遇到类似的问题,解决方法和我上面的大同小异,无非是多捕获一个ListView的Click事件,并且在该事件中判断是不是鼠标双击。判断鼠标双击的代码如下:private void lstvwImage_MouseDown(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        this.isDoubleClickingOnTheItem = (e.Clicks >= 2);
      }
    }