【问题标题】:Finding the row and column in a listview that the mouse cursor is over在列表视图中查找鼠标光标所在的行和列
【发布时间】:2010-10-14 00:10:56
【问题描述】:

我有一个简单的 ListView,本质上是创建一个 MxN 网格。 “FullRowSelect”已关闭。本质上,我们有一个单元格。

我试图找出鼠标在一个包含项目的单元格上,如果是,它是什么项目。

GetItemAt(...) 接近我想要做的,但并不完全。如果“单元格”中有文本,则 GetItemAt() 返回项目。问题是,如果它在单元格之上,但实际上并未在单元格中的文本之上,那么它返回 null。

我被难住了。谁能帮帮我?

【问题讨论】:

  • 您使用的是 Winforms 还是 WPF?

标签: c# listview


【解决方案1】:

ListView 有一个关于命中测试的错误/“功能”。

如果 FullRowSelectfalse 并且该点位于单元格 0 上但不在 文本或图标,GetItemAt() 不会记录命中。

解决此问题的一种黑客方法是拦截低级别的LVM_HITTEST 消息,打开FullRowSelect,进行正常的LVM_HITTEST 处理,然后再次关闭FullRowSelect。这种工作,但可能会弄乱工具提示 底层控制。

更简单的方法是使用ObjectListView(一个围绕.NET ListView 的开源包装器),它已经通过标准ListView 解决了这个问题(以及许多其他问题)。

我是这个控件的作者,所以,是的,我有偏见,但不一定不准确:)

【讨论】:

  • 感谢您的回复。这个“功能”让我发疯。我尽量避免使用第三方库,但我会看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多