【问题标题】:Getting the item under mouse cursor in a listview control?在列表视图控件中获取鼠标光标下的项目?
【发布时间】:2009-06-25 18:57:59
【问题描述】:

基本上我正在尝试实现一个功能,如果用户按下一个键,我想找出鼠标光标下的项目。

所以我不使用鼠标事件,但键盘事件当然不会给我 ListViewItem。

我只是不知道我需要在什么空间中获取鼠标位置并将其转换为控件的空间。

有什么想法吗?

【问题讨论】:

标签: c# .net winforms listview


【解决方案1】:

如果你知道你对哪个 ListView 控件感兴趣,下面的方法就可以解决问题:

private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition)
{
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView
    Point localPoint = listView.PointToClient(mousePosition);
    return listView.GetItemAt(localPoint.X, localPoint.Y);
}

// call it like this:
ListViewItem item = GetItemFromPoint(myListView, Cursor.Position);

【讨论】:

  • 谢谢 Fredrik,我今天就试试这个。
  • 请注意,如果您在鼠标事件处理程序中执行此操作,例如MouseDoubleClick,MouseEventArgs.Location 已经是客户端相关的,因此您不想调用 PointToClient()
【解决方案2】:

取决于鼠标位置的键盘动作听起来有点不合常规。键盘操作通常会影响屏幕上突出显示/聚焦/选择的某些项目,无论是通过先前的键盘操作还是通过鼠标单击该项目来选择。

请记住一些事情,否则您最终会遇到“独特的”(令人困惑的)用户交互。

【讨论】:

  • 别担心,我正在为自己添加此功能以简化自己的开发。它不会出现在最终版本中:)
猜你喜欢
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2012-05-15
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多