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

标签 c# listview selecteditem selected

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

最佳答案

这是您通常不应该修复的问题。用户有意点击某处,这很可能是因为她想要取消选择一个项目。如果这是无意的,那么她就会明白发生了什么,并知道如何纠正它。为标准控件提供非标准行为只会让用户感到困惑。

但你可以修复它。您需要防止 native 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);
  }
}

关于c# - 如何保持选中的项目? - 列表显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529743/

相关文章:

android - ViewPager 内的 ListView 不滚动

Android ListView notifyDataSetChanged

c# - 从 CheckboxList 中获取选定的项目 MVC.NET Razor

wpf - 您如何以编程方式将焦点设置到已具有焦点的 WPF ListBox 中的 SelectedItem?

c# - 类型 'X' 在类型 'Y.Z' 中不存在

c# - 使用 C# 从流中读取字符串

c# - 刷新高速缓存时如何提供过时的数据?

c# - 大型 System.IO.MemoryStream 是否会导致我的应用程序的内存使用量急剧增加?

listview - 触发 onItemDisclosure 事件会导致 itemtap 事件触发

pyqt4 - 我怎样才能在tableview pyqt4中获得选定的项目