繁体   English   中英

如何保持选中的项目? - 列表显示

[英]How to keep an item selected? - ListView

当用户单击没有项目的空间时,我想在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;否则,值为0。 如果是这样,请将其重置为先前的值(您可以将其存储在变量中...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM