C# 在列表视图中查找鼠标光标所在的行和列

C# 在列表视图中查找鼠标光标所在的行和列,c#,listview,C#,Listview,我有一个简单的列表视图,基本上创建了一个MxN网格。“FullRowSelect”处于关闭状态。基本上我们有一个网格的细胞 我试图找出鼠标在包含一个项目的单元格上,如果是,它是什么项目 GetItemAt(…)接近于我想要做的事情,但并不完全如此。如果“单元格”中有文本,则GetItemAt()返回该项。问题是,如果它位于单元格上方,但实际上不在单元格中的文本上方,则返回null 我被难住了。有人能帮我吗?ListView中有一个关于命中测试的bug/“功能” 如果FullRowSelect为f

我有一个简单的列表视图,基本上创建了一个MxN网格。“FullRowSelect”处于关闭状态。基本上我们有一个网格的细胞

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

GetItemAt(…)接近于我想要做的事情,但并不完全如此。如果“单元格”中有文本,则GetItemAt()返回该项。问题是,如果它位于单元格上方,但实际上不在单元格中的文本上方,则返回null

我被难住了。有人能帮我吗?

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

如果
FullRowSelect
false
且点位于单元格0上方但未打开 文本或图标,
GetItemAt()
不会注册命中

解决这个问题的一种黑客方法是拦截低级的
LVM_HITTEST
消息,打开
FullRowSelect
,执行正常的
LVM_HITTEST
处理,然后再次关闭
FullRowSelect
。这类方法可以工作,但可能会弄乱机器上的工具提示 基础控制

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

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

ListView中有一个关于命中测试的bug/“特性”

如果
FullRowSelect
false
且点位于单元格0上方但未打开 文本或图标,
GetItemAt()
不会注册命中

解决这个问题的一种黑客方法是拦截低级的
LVM_HITTEST
消息,打开
FullRowSelect
,执行正常的
LVM_HITTEST
处理,然后再次关闭
FullRowSelect
。这类方法可以工作,但可能会弄乱机器上的工具提示 基础控制

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


我是此控件的作者,因此,是的,我有偏见,但不一定不准确:)

您使用的是Winforms还是WPF?您使用的是Winforms还是WPF?谢谢您的回复。这个“特征”让我发疯。我尽量避免使用第三方库,不过我会看一看。谢谢你的回复。这个“特征”让我发疯。我尽量避免使用第三方库,不过我会看一看。