在vb.net中,使用ListView 控件时,如果CheckBoxes设置为True,我们双击一个列表项的时候,该项前面的复选框状态就会发生更改,它的这个功能,很多时候会给我们程序的用户带来不便。那么如何阻止双击某项时,复选框状态发生更改呢?
解决办法是:重写控件的 WndProc 方法,捕获双击消息,然后处理它。
解决方案如下:
因为需要重写控件的方法,所以我们干脆重载ListView 控件,制作一个用户控件。
1、首先,建立一个空白的vb.net项目,然后选择菜单上的“项目”——“添加用户控件”,如下图一所示:

图一:添加用户控件
2、把该用户控件的名称命名为MyListView,单击确定后,打开MyListView类的代码窗口,进行如下修改:
Inherits System.Windows.Forms.UserControl
改为
Inherits System.Windows.Forms.ListView
表示我们的用户控件继承于ListView类。
3、然后在它的下面声明一个常量,表示鼠标左键的双击动作:
Private Const WM_LBUTTONDBLCLK As Integer = 515
4、重写WndProc方法
Protected Overloads Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_LBUTTONDBLCLK Then
Dim p As Point = PointToClient(New Point(Cursor.Position.X, Cursor.Position.Y))
Dim lvi As ListViewItem = GetItemAt(p.X, p.Y)
If Not lvi Is Nothing Then
lvi.Selected = True
End If
lvi = Nothing
OnDoubleClick(New EventArgs)
Else
MyBase.WndProc(m)
End If
End Sub
http://www.qqread.com/book/myvbnet/my0048.html
5、重新生成项目,然后在工具箱——我的用户控件中找到MyListView 控件,如下图所示:

图二:用户控件
现在我们就可以如同使用ListView 控件一样把MyListView 控件拖放到窗体上并使用它了,它是继承于ListView类的,所以除了我们增加的双击不改变复选框的状态以外,其它用法与ListView 控件都是一样的。
浏览URL http://www.qqread.com/book/myvbnet/my0048.html进入讨论组讨论。相关专题
- 用vb.net实现闹钟提醒程序 (9次浏览)
- vb.net GDI+入门——画笔、画刷和颜色 (3次浏览)
- VB.Net实现进程监视器的方法 (1次浏览)
- VB2005中开发新一代控制台应用程序(3) (0次浏览)
- vb.net使用ListView 控件显示系统驱动器 (0次浏览)
- vb.net入门——ListView 控件的使用 (0次浏览)
- vb.net GDI+入门——使用Graphics对象填充图形 (0次浏览)
- .Net中ListView控件多选时复选框自动选择问题 (0次浏览)
- vb.net GDI+入门——使用Graphics对象绘制线图 (0次浏览)
- vb.net GDI+入门——了解Font类 (0次浏览)



