C#学习教程:CheckedListBox控件-复选框仅在实际复选框被单击时选中这是一个很好的控制,但有一件事困扰着我;我无法设置该属性,以便它仅在我实际选中复选框时才选中该项目。克服这个问题的最佳方法是什么?我一直在考虑从复选框的左侧获取鼠标单击的位置。这部分有效,但如果我点击一个空白区域,离左边足够近,当前选择的项目仍然被选中。对此有什么想法吗?好吧,它很丑,但是你可以通过像这样挂钩CheckedListBox.MouseDown和CheckedListBox.ItemCheck来计算项目矩形的鼠标点击坐标//////为了控制项目检查变化(盲目双击等)///boolAuthorizeCheck{get;放;}privatevoidcheckedListBox1_ItemCheck(objectsender,ItemCheckEventArgse){if(!AuthorizeCheck)e.NewValue=e.CurrentValue;//检查状态变化不是通过授权操作}privateListDown_Box1voidch1(objectsender,MouseEventArgse){Pointloc=this.checkedListBox1.PointToClient(Cursor.Position);for(inti=0;i我知道这篇文章有点旧,但我认为提供另一种解决方案不是问题:privatevoidcheckedListBox1_MouseClick(objectsender,MouseEventArgse){if((e.Button==MouseButtons.Left)&(eX>13)){this.checkedListBox1.SetItemChecked(this.checkedListBox1.SelectedIndex,!this.checkedListBox1.GetItemChecked(this.checkedListBox1.SelectedIndex));}}(CheckOnClick的值=True)。你可以在矩形中使用那个东西,但为什么要让它更复杂。另一种解决方案是简单地使用Treeview。设置CheckBoxes为true,ShowLines为false,ShowPlusMinus为false,和CheckedListBox基本一样。只有在单击实际的CheckBox时才会检查这些项目。CheckedListBox更简单,但TreeView提供了许多可能更适合您的程序的选项。默认情况下,CheckedListBox中复选框的文本是在复选框输入后放置一个HTML标记,并将标记的“for”属性设置为复选框的ID。当标签说它是“for”的元素时,单击该标签会告诉浏览器关注该元素,这就是您所看到的。两种选择是使用单独的CheckBox控件和文本(不是CheckBox的Text属性,因为它与CheckBoxList做同样的事情)来呈现您自己的列表,或者如果列表是静态的,或者如果列表是动态的,则使用类似Repeater的东西内容。尝试这个。将iLastIndexClicked声明为表单级int变量。privatevoidchklst_MouseClick(objectsender,MouseEventArgse){Pointp=chklst.PointToClient(MousePosition);inti=chklst.IndexFromPoint(p);如果(pX>15){返回;}//正文click.if(chklst.CheckedIndices.Contains(i)){return;}//如果已经有了焦点,点击任何地方都可以。如果(iLastIndexClicked==i){返回;}//本机代码将检查/取消检查chklst.SetItemChecked(i,true);iLastIndexClicked=i;}只是检查用户是否单击了选中列表最左边的15个像素(复选框区域),除了重新选中当前选中的项目外,它始终有效。存储最后一个索引并在没有更改的情况下退出会使本机代码正确处理它,尝试将其设置为选中,在这种情况下打开它并在“ItemCheck”代码运行时将其关闭。以上就是C#学习教程:CheckedListBox控件——只在点击实际复选框时才选中复选框。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
