当用户单击没有项目的空间时,我想在 ListView 上保持选中的项目。例如,项目下方的空间,但仍在 ListView 组件上。我已将 ListView 属性“HideSelection”更改为 false,但这仅在焦点更改为另一个组件时才有效;当用户单击 ListView 本身时不会。谢谢!
这是您通常不应该修复的问题。用户故意点击了某个地方,这很可能是因为她wanted取消选择一个项目。如果这是无意的,那么她会明白发生了什么并知道如何纠正。为标准控件提供非标准行为往往只会让用户感到困惑。
但你可以修复它。您需要防止本机 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)