C# 在列表视图中查找鼠标光标所在的行和列
我有一个简单的列表视图,基本上创建了一个MxN网格。“FullRowSelect”处于关闭状态。基本上我们有一个网格的细胞 我试图找出鼠标在包含一个项目的单元格上,如果是,它是什么项目 GetItemAt(…)接近于我想要做的事情,但并不完全如此。如果“单元格”中有文本,则GetItemAt()返回该项。问题是,如果它位于单元格上方,但实际上不在单元格中的文本上方,则返回null 我被难住了。有人能帮我吗?ListView中有一个关于命中测试的bug/“功能” 如果C# 在列表视图中查找鼠标光标所在的行和列,c#,listview,C#,Listview,我有一个简单的列表视图,基本上创建了一个MxN网格。“FullRowSelect”处于关闭状态。基本上我们有一个网格的细胞 我试图找出鼠标在包含一个项目的单元格上,如果是,它是什么项目 GetItemAt(…)接近于我想要做的事情,但并不完全如此。如果“单元格”中有文本,则GetItemAt()返回该项。问题是,如果它位于单元格上方,但实际上不在单元格中的文本上方,则返回null 我被难住了。有人能帮我吗?ListView中有一个关于命中测试的bug/“功能” 如果FullRowSelect为f
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?谢谢您的回复。这个“特征”让我发疯。我尽量避免使用第三方库,不过我会看一看。谢谢你的回复。这个“特征”让我发疯。我尽量避免使用第三方库,不过我会看一看。