C#学习教程:WinformsListView–双击时停止自动检查我可以尝试连接到MouseDoubleClick事件并将Checked属性设置为false,但这感觉有点像hack。我在实际签出该项目时也会运行相当昂贵的计算,并且不希望此代码在双击时运行。上面的事件挂钩将在处理双击之前引发ItemCheck和ItemChecked事件。有优雅的解决方案吗?当您必须破解本机Windows控件的工作方式时,优雅通常不会弹出,但这正是这里所需要的。考虑您是否真的希望您的控件的行为不同于任何其他程序中的列表视图。在项目中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。使用系统;使用System.Windows.Forms;classMyListView:ListView{protectedoverridevoidWndProc(refMessagem){//过滤WM_LBUTTONDBLCLKif(m.Msg!=0x203)base.WndProc(refm);如果您不想完全关闭DoubleClick消息,只需关闭自动检查行为即可。您可以改为执行以下操作:publicclassNoDoubleClickAutoCheckListview:ListView{privateboolcheckFromDoubleClick=false;protectedoverridevoidOnItemCheck(ItemCheckEventArgsice){if(this.checkFromDoubleClick){ice.NewValue=ice.CurrentValue;这个.checkFromDouble;}否则base.OnItemCheck(ice);}protectedoverridevoidOnMouseDown(MouseEventArgse){//这是双击吗?if((e.Button==MouseButtons.Left)&&(e.Clicks>1)){this.checkFromDoubleClick=true;}base.OnMouseDown(e);}protectedoverridevoidOnKeyDown(KeyEventArgse){this.checkFromDoubleClick=false;base.OnKeyDown(e);我有一个类似的问题,这就是我处理它的方式。基本上,如果当光标的x坐标大于复选框的x坐标时选中该项目,则取消该检查(因为这意味着当用户双击该项目时调用该检查)。数字22的误差幅度仅限于用户在复选框后双击(很难做到)。注意:我的代码假设用户不会双击复选框(用户双击该项目或单击复选框)抱歉代码在VB中?PrivateSublvComboLists_ItemCheck(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.ItemCheckEventArgs)HandleslvComboLists.ItemCheckDimiAsInteger=CType(sender,ListView).PointToClient(Cursor.Position).X如果i>22那么e.NewValue=e.CurrentValueEndIfEndSub我使用更简单的方法,只需将复选框的值更改为与当前状态相反的状态,即可将复选框的值重置为其原始状态:详细了解C#学习教程,希望您会多注意它—PrivateSublst_Images_DoubleClick(ByValsenderAsObject,ByValeAsSystem.EventArgs)Handleslst_Images.DoubleClickDimfIndexAsInteger=Me.lst_Images.SelectedIndices(0)'撤销复选框状态的改变点击事件。lst_Images.Items(fIndex).Checked=Notlst_Images.Items(fIndex).Checked'调用查看器窗体DimfViewerAsNewImage_Edit(fIndex)fViewer.ShowDialog()fViewer.Dispose()EndSub本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除如转载请注明出处:
