【问题标题】:Set mouse pointer location to the selected item in a combo box将鼠标指针位置设置到组合框中的选定项目
【发布时间】:2012-02-15 01:25:07
【问题描述】:

我有一个下拉而不是下拉的组合框。我将所选项目设置为列表顶部的项目。我想移动我的鼠标指针指向它,这样想要点击该项目的用户就不必移动他的鼠标了。我找到了如何移动指针,它是用这个命令:

Windows.Forms.Cursor.Position = New System.Drawing.Point(x,y)

但我需要知道如何在组合框中获取所选项目的位置。

【问题讨论】:

  • 请注意,为用户移动鼠标是一种不寻常的行为,许多用户可能不喜欢。
  • 是的,原因是 99% 的时间他们会单击列表顶部的项目,这与组合的向下按钮有相当大的距离。如果我可以将列表下拉而不是向上,这将不是问题,但我的组合框位于屏幕底部。
  • 您也可以考虑将该项目设为默认选中项目,这样他们就根本不需要下拉列表。
  • 伊格比说了什么。更改默认选定项目,这样他们就不必单击任何内容。移动光标不受欢迎,绝对不是正确的方法。我很欣赏您试图让用户更轻松,但这可能只会让他们感到困惑。在表单的构造函数中使用如下代码:myComboBox.SelectedIndex = 0
  • 我意识到这是非正统的。当列表打开时,我已经将顶部项目设置为选定的项目,但是为了处理它,用户必须单击它(或按 Enter)。用户必须做出主动选择,即。不选择任何项目并采用默认值不是一种选择。

标签: vb.net winforms combobox mouse


【解决方案1】:

在旅游网站上搜索目的地时,它们通常会显示一个排序的目的地列表,但在列表的开头会重复 2-3 个最常见的目的地。这样一来,您既能遵守标准行为,又能让最终用户的生活更轻松。

我会在组合框的末尾添加一个快速列表,其中包含最常用的项目,以便轻松选择它们,而无需将鼠标移动超过几毫米。如果用户想要选择其他任何内容,排序列表将位于上方。当程序启动时,将最后一个项目设置为选中(“选择目标”项目)。

(然后我会向客户解释这是用户所期望的,而不是鼠标指针会自行移动并希望客户改变主意。)

像这样:

【讨论】:

  • 感谢大家的cmets。我设法让我的客户相信,颠倒整个数据集的排序顺序是一个可以接受的解决方案。
【解决方案2】:

如果问题是第一个项目离组合太远:你不能颠倒项目的顺序吗?这样第一个也是点击次数最多的项目成为最后一个,因此将非常接近组合。也许您还可以在点击次数最多的项和其他项之间插入一个空项,以使其突出。

更新 1
因此,如果控件是标准的 winform 组合框,您可以尝试检查属性 ItemHeight 的值,然后将该值乘以下拉列表中的项目数,这应该会给您第一个项目在下拉列表中的位置.
有了这个值,也许你就可以计算出鼠标光标的位置。

注意事项:

  • 您需要检查这是否适用于所有计算机
  • 您需要测试它是否可以在不同的字体/字体大小下正常工作(ItemHeight 属性是只读的,并且绑定到选定的字体/字体大小)
  • 您应该尝试当用户更改系统字体大小放大倍率(120dpi 125%/150%)时会发生什么注意,WinXP 和 Win7 以不同的方式处理此参数
  • 检查屏幕上是否有足够的空间容纳下拉列表中的所有项目
  • 将下拉菜单配置为 MaxDropDownItems > 大于下拉列表中的数字

【讨论】:

  • 确实,移动光标的另一个更好的选择。
  • 项目按升序排序是有原因的。客户不想改变这一点。鼠标指针跳动是他的要求。我只是遵守。
  • 这是行不通的。它有太多的问题。该代码将要求您做出太多假设,而这些假设很少是真的。提出请求确实是客户的工作。但你作为程序员(即专家)的工作也是向客户解释为什么他们提出的建议是一个坏主意和/或行不通。提出合适的替代方案也是您的工作。如果他们了解所有注意事项和限制,他们就不需要你;他们只会自己编写软件。
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2010-10-15
  • 2016-06-19
  • 1970-01-01
  • 2011-06-24
  • 2012-09-18
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多