在用户控件上更改光标

古三

我有一个显示图像的用户控件,将鼠标悬停在该控件上时,图像名称显示在图像下方的标签中。我已将此用户控件放在TableLayoutPanel单元格中,该单元格创建了一个图像表。

我试图在鼠标移到每个控件上,甚至在窗体本身上时更改光标。

我试图把

Cursor.Current = Cursors.Hand

MouseEnter控制器的情况下TableLayoutPanel,即使是父形式也没有运气。什么都没发生。为什么?

我还注意到,这在用户控件中很常见,在输入用户控件时很难更改鼠标光标。

有谁知道如何在用户控件中更改光标?

科迪·格雷

在内部,每个窗口都有一个与之关联的游标。(在Windows中,控件是一种窗口。)当鼠标指针移到该窗口上时,操作系统将向其发送一条消息(WM_SETCURSOR),询问应显示哪个光标。窗口以其关联的光标进行响应,系统使用它。例如,这就是文本框显示I型光标的方式。

当然,光标是全局资源,因此,尽管可以临时更改它,但只要将鼠标指针移到另一个控件上,就会发生上述过程,并且光标将变回原处。这就是您设置时发生的情况Cursor.Current这对全局游标进行了临时更改,但是与您的控件相关联的游标实际上已还原了该临时更改。像这样的临时变化时非常方便,例如,呈现出忙状态光标。它使您不必记住将忙碌的游标更改回标准指针。

如果在鼠标指针悬停在控件上时始终希望显示特定的光标,则需要将该光标与该控件关联。操作系统提供了一种执行此操作的方法,并且WinForms中有一个非常简单的包装程序。只需控件Cursor属性设置为所需的任何类型的游标即可。这可以是系统提供的标准游标之一,也可以是Cursor您创建的自定义对象。您可以在设计时或在控件的构造函数中设置此属性。

值得注意的是,该Cursor属性是环境属性,这是一种特殊类型的属性。如果尚未将环境属性显式设置为值,它将从控件的父级继承其值。因此,这意味着您可以Cursor为整个Form设置属性,并且该窗体上的所有控件都将继承该值并显示相同的光标。(在内部,每个控件实际上是一个单独的窗口,因此,如果没有此窗口,则需要遍历并为每个控件设置光标。)

但是,如果您的眼睛敏锐,您会立即发现问题。Cursors.Hand光标是难看和非标。(这不会影响其他Cursors选项。)由于使用时间长,WinForms实际上并未为此使用系统的Hand光标。它使用自己的硬编码黑白版本,像拇指酸痛一样伸出来。如果要修复它,将需要一些额外的工作。我不久前写了一个解决方案,展示了如何继承和修复内置的LinkLabel控件您可以将其调整为适用于任何控件,包括UserControl除名称外,所有代码均相同。在我在这里开始回答后阅读了背景信息之后,您应该清楚地知道代码在做什么。

最后的警告:Cursors.Hand光标经常被滥用。有时,您会看到人们在按钮或其他控件上使用此光标,只是表示可以“单击”它。手形光标几乎专门用于Web样式的超链接。操作系统本身遵循此约定,精心设计的应用程序也应遵循此约定这意味着它不应用于标准按钮或任何看起来柔韧的东西,而应将其用于承受能力较弱且否则无法单击的链接。我不能从问题中看出您的用例是否合适。可能是因为听起来像您已经创建了超链接。但是我只是想为了将来的读者而提及这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在用户控件上更改光标

来自分类Dev

在用户控件上动态选择矩形

来自分类Dev

使用DataTrigger在用户控件中更改图像

来自分类Dev

WPF:将焦点集中在用户控件的不同实例上

来自分类Dev

Bootstrap Modal无法在用户控件上运行

来自分类Dev

C#在用户控件上绘制链接标签

来自分类Dev

如何在用户控件上重定向事件

来自分类Dev

在用户控件上设置绑定到主窗口的ViewModel

来自分类Dev

如何在用户控件WinForm中访问托管表单上的控件

来自分类Dev

在用户更改的单元格上运行宏

来自分类Dev

在用户控件中更改WPF texbox的“已启用”(代码隐藏)

来自分类Dev

单击主窗体上的按钮时,在用户控件中隐藏面板

来自分类Dev

如何在用户控件上公开组合框数据绑定

来自分类Dev

使用VBA:在用户窗体上为标签控件分配值

来自分类Dev

如何禁用鼠标悬停在用户控件上的突出显示效果

来自分类Dev

将鼠标光标更改为等待图标,并防止用户单击任何控件

来自分类Dev

在用户控件中处理对象?

来自分类Dev

BackgroundWorker不在用户控件内触发

来自分类Dev

在用户控件内部,获取元素值

来自分类Dev

在用户控件中的哪里清理?

来自分类Dev

在用户控件内设置Treeview的ItemTemplateSelector

来自分类Dev

在用户控件中使用FarPoint价差

来自分类Dev

在用户控件中定义命令绑定

来自分类Dev

在用户控件中包含CSS文件

来自分类Dev

在切换到另一个控件之前,如何将数据保存在用户控件上?

来自分类Dev

如何在控件内更改鼠标光标?

来自分类Dev

如何在控件内更改鼠标光标?

来自分类Dev

c#在用户控件中使用计时器更改值时从Form获取变量值

来自分类Dev

在角度,如何在用户事件(如页面更改)上使用cancel $ interval?

Related 相关文章

  1. 1

    在用户控件上更改光标

  2. 2

    在用户控件上动态选择矩形

  3. 3

    使用DataTrigger在用户控件中更改图像

  4. 4

    WPF:将焦点集中在用户控件的不同实例上

  5. 5

    Bootstrap Modal无法在用户控件上运行

  6. 6

    C#在用户控件上绘制链接标签

  7. 7

    如何在用户控件上重定向事件

  8. 8

    在用户控件上设置绑定到主窗口的ViewModel

  9. 9

    如何在用户控件WinForm中访问托管表单上的控件

  10. 10

    在用户更改的单元格上运行宏

  11. 11

    在用户控件中更改WPF texbox的“已启用”(代码隐藏)

  12. 12

    单击主窗体上的按钮时,在用户控件中隐藏面板

  13. 13

    如何在用户控件上公开组合框数据绑定

  14. 14

    使用VBA:在用户窗体上为标签控件分配值

  15. 15

    如何禁用鼠标悬停在用户控件上的突出显示效果

  16. 16

    将鼠标光标更改为等待图标,并防止用户单击任何控件

  17. 17

    在用户控件中处理对象?

  18. 18

    BackgroundWorker不在用户控件内触发

  19. 19

    在用户控件内部,获取元素值

  20. 20

    在用户控件中的哪里清理?

  21. 21

    在用户控件内设置Treeview的ItemTemplateSelector

  22. 22

    在用户控件中使用FarPoint价差

  23. 23

    在用户控件中定义命令绑定

  24. 24

    在用户控件中包含CSS文件

  25. 25

    在切换到另一个控件之前,如何将数据保存在用户控件上?

  26. 26

    如何在控件内更改鼠标光标?

  27. 27

    如何在控件内更改鼠标光标?

  28. 28

    c#在用户控件中使用计时器更改值时从Form获取变量值

  29. 29

    在角度,如何在用户事件(如页面更改)上使用cancel $ interval?

热门标签

归档