[英]How to keep an item selected? - ListView
当用户单击没有项目的空间时,我想在ListView上保持选中状态。 例如,项目下方的空间,但仍在ListView组件上。 我将ListView属性“ HideSelection”更改为false,但这仅在焦点更改为另一个组件时才有效。 当用户单击ListView本身时,不可以。 谢谢!
这通常是您不应该解决的。 用户有意单击某处,这很可能是因为她想取消选择一项。 如果不是故意的,那么她会明白发生了什么并知道如何纠正。 提供标准控件的非标准行为往往只会使用户感到困惑。
但是您可以修复它。 您需要阻止本地ListView控件看到点击。 这需要重写WndProc()方法并检查单击发生的位置。 将新类添加到您的项目中,然后粘贴以下代码。 编译。 将新控件从工具箱的顶部拖放到窗体上。
using System;
using System.Drawing;
using System.Windows.Forms;
class MyListView : ListView {
protected override void WndProc(ref Message m) {
if (m.Msg == 0x201 || m.Msg == 0x203) { // Trap WM_LBUTTONDOWN + double click
var pos = new Point(m.LParam.ToInt32());
var loc = this.HitTest(pos);
switch (loc.Location) {
case ListViewHitTestLocations.None:
case ListViewHitTestLocations.AboveClientArea:
case ListViewHitTestLocations.BelowClientArea:
case ListViewHitTestLocations.LeftOfClientArea:
case ListViewHitTestLocations.RightOfClientArea:
return; // Don't let the native control see it
}
}
base.WndProc(ref m);
}
}
一种方法:在SelectedIndexChanged事件上,检查值是否为-1;否则,值为0。 如果是这样,请将其重置为先前的值(您可以将其存储在变量中...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.