1

当用户单击没有项目的空间时,我想在 ListView 上保留一个项目。例如,项目下方的空间,但仍在 ListView 组件上。我已将 ListView 属性“HideSelection”更改为 false,但这仅在焦点更改为另一个组件时有效;不是当用户单击 ListView 本身时。谢谢!

4

2 回答 2

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);
  }
}
于 2010-03-27T15:31:43.853 回答
0

一种方法:在 SelectedIndexChanged 事件上,检查值是否为 -1;如果是这样,请将其重置为以前的值(您可能将其存储在变量中......)

于 2010-03-27T15:09:34.757 回答