当用户点击没有项目的空格时,我想在ListView上保留一个项目。例如,项目下方的空间,但仍在ListView组件上。我将ListView属性“HideSelection”更改为false,但只有在焦点更改为另一个组件时才有效;而不是当用户点击ListView本身时。谢谢!
答案 0 :(得分:5)
这是你通常不应该解决的问题。用户故意点击某处,这可能是因为她想要取消选择一个项目。如果它是无意的,那么她就会明白发生了什么,并知道如何纠正它。给予标准控制非标准行为往往只会使用户感到困惑。
但你可以解决它。您需要阻止本机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);
}
}
答案 1 :(得分:0)
一种方法:在SelectedIndexChanged事件上,检查值是否为-1;如果是这样,将其重置为之前的值(您可以将其存储在变量中......)