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

时间:2010-10-14 00:10:56

标签: c# listview

我有一个简单的ListView,实际上是创建一个MxN网格。 “FullRowSelect”已关闭。基本上我们有一个细胞网格。

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

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

我很难过。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

ListView存在关于命中测试的错误/“功能”。

如果FullRowSelectfalse且该点位于单元格0上但未打开 文本或图标GetItemAt()不会注册。

解决此问题的一种方法是截取低级LVM_HITTEST消息,打开FullRowSelect,执行正常的LVM_HITTEST处理,然后再关闭FullRowSelect 。这种工作但可能搞砸了工具提示 潜在的控制。

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

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