Han*_*ant 12
当你不得不破解本机Windows控件的工作方式时,优雅通常不会突然出现,但这就是这里所需要的.请考虑您是否真的希望您的控件的行为与任何其他程序中的列表视图不同.
在项目中添加一个新类并粘贴下面显示的代码.编译.将新控件从工具箱顶部拖放到表单上.
using System;
using System.Windows.Forms;
class MyListView : ListView {
protected override void WndProc(ref Message m) {
// Filter WM_LBUTTONDBLCLK
if (m.Msg != 0x203) base.WndProc(ref m);
}
}
Run Code Online (Sandbox Code Playgroud)
Joa*_*kim 12
如果您不想完全关闭DoubleClick消息,只需关闭自动检查行为即可.您可以改为执行以下操作:
public class NoDoubleClickAutoCheckListview : ListView
{
private bool checkFromDoubleClick = false;
protected override void OnItemCheck(ItemCheckEventArgs ice)
{
if (this.checkFromDoubleClick)
{
ice.NewValue = ice.CurrentValue;
this.checkFromDoubleClick = false;
}
else
base.OnItemCheck(ice);
}
protected override void OnMouseDown(MouseEventArgs e)
{
// Is this a double-click?
if ((e.Button == MouseButtons.Left) && (e.Clicks > 1)) {
this.checkFromDoubleClick = true;
}
base.OnMouseDown(e);
}
protected override void OnKeyDown(KeyEventArgs e)
{
this.checkFromDoubleClick = false;
base.OnKeyDown(e);
}
}
Run Code Online (Sandbox Code Playgroud)