如何选择项目?- 列表显示

Joe*_*ani 1 c# listview selecteditem selected

当用户点击没有项目的空格时,我想在ListView上保留一个项目.例如,项目下方的空间,但仍在ListView组件上.我将ListView属性"HideSelection"更改为false,但只有在焦点更改为另一个组件时才有效; 而不是当用户点击ListView本身时.谢谢!

Han*_*ant 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);
  }
}
Run Code Online (Sandbox Code Playgroud)