请教:ListView取鼠标点击所在行和列时遇到的问题

FindCsdnToDay 2004-08-14 12:16:07
在ListView的鼠标点击事件中可用 GetItemAt(e.X, e.Y) 取到所点击的行,
并用ColumnHead.Width相加与 e.X 比较的方法求点击所在的列。
但如果行比较长,点过滚动条后,这种办法就不灵了。因为 e.X
是当前工作区的相对坐标,求高手指点解决方法。
...全文
183 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
utna 2004-08-15
  • 打赏
  • 举报
回复
用API,获取滚动位置
[DllImport("user32.dll", EntryPoint="GetScrollInfo")]
public static extern int GetScrollInfo (
int hWnd,
int n,
ref SCROLLINFO lpScrollInfo
);
FindCsdnToDay 2004-08-14
  • 打赏
  • 举报
回复
Sorry, 我没说清楚, 是水平方向滚动, 所以 Items.EnsureVisible() 不管用啊。
FindCsdnToDay 2004-08-14
  • 打赏
  • 举报
回复
BearRui(我有点笨,但我很特别,所以我特别笨!) ( ) 信誉:100 2004-08-14 17:02:00 得分: 0


GetItemAt(e.X, e.Y)直接是返回点击的ListViewItem列啊。

干嘛还要通过什么与ColumnHead.Width相加啊。

直接这样不就行啦。

ListViewItem lvItem=listView1.GetItemAt(e.X, e.Y);

这样就返回啦点击的列!!!


no, GetItemAt 返回的是Item, 我要确定的是Column
skylineforever 2004-08-14
  • 打赏
  • 举报
回复
对,设置EnsureVisible()
这样就一直在可视区域
3tzjq 2004-08-14
  • 打赏
  • 举报
回复
.Items(行位置).EnsureVisible()
BearRui 2004-08-14
  • 打赏
  • 举报
回复
GetItemAt(e.X, e.Y)直接是返回点击的ListViewItem列啊。

干嘛还要通过什么与ColumnHead.Width相加啊。

直接这样不就行啦。

ListViewItem lvItem=listView1.GetItemAt(e.X, e.Y);

这样就返回啦点击的列!!!
FindCsdnToDay 2004-08-14
  • 打赏
  • 举报
回复
有谁知道坐标转换或如何捕获ListView滚动条的事件也行啊!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧