如何保留一个项目? – 列表显示

当用户点击没有项目的空格时,我想在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; 如果是这样,将其重置为之前的值(您可以将其存储在变量中……)