【发布时间】:2017-09-25 10:46:10
【问题描述】:
请注意:
在这篇文章中,我指的是过时的 ToolBarButton 而不是 ToolStripButton。
我正在实现一个帮助功能,您可以在其中进入帮助模式以显示某些 ui 元素的帮助。将鼠标悬停在附加了此类帮助的元素上后,光标应更改为 Cursors.Help。这适用于大多数元素,但不适用于ToolBarButtons,因为它缺少.Cursor 属性。
到目前为止,我一直在做的是:
Private Sub EnterHelpMode()
helpMode = True
toolBar.Cursor = Cursor.Help
' ... other help-related stuff
End Sub
不幸的是,这给了整个ToolBar 那个帮助图标。我如何实现相同的行为但仅适用于ToolBarButtons?我还尝试使用ToolBar 上的MouseEnter 事件,但与ButtonClick 事件不同的是,这个事件没有给我ToolBarButtonClickEventArgs 参数,所以我无法确定哪个ToolBarButton 被悬停(哪个有道理,因为源并不总是ToolBarButton,而ButtonClick 是)。
提前致谢
【问题讨论】:
-
这不是正确的方法,也不是标准的方法。 Capture 属性是关键,单击帮助按钮时将其设置为 true。您现在可以完全控制 Cursor.Current 并获取所有 MouseMove 事件。进行点击测试以查看悬停的控件或工具条项目并相应地更改 Cursor.Current。获得 MouseDown 时停止帮助模式并显示相关主题。
-
谢谢,我看看能不能搞定
-
@HansPassant 我无法使用
ToolBarButton进行命中测试,因为它缺少ClientRectangle方法。关于如何做到这一点的任何建议? -
您必须再次以相反的方式执行此操作。使用窗体的 GetChildAtPoint() 方法来查找被悬停的控件。这将返回一个 ToolStrip,现在您可以使用它的 GetItemAt() 方法来获取 ToolStripItem。
-
哦,糟糕。好吧,关于相同的配方,测试 ToolBar,然后迭代其 Button 以针对其 Rectangle 进行命中测试。
标签: .net vb.net winforms mouseevent