我想在鼠标悬停在按钮上时显示工具提示,只要鼠标悬停在按钮上,工具提示就应该跟随鼠标.实现这一目标的正确方法是什么?
当我添加一个调用了更新鼠标位置的tooltip.Show(...)的MouseMove事件时,它会非常闪烁,并且当鼠标停留时也会重绘工具提示.如果它是OwnerDraw工具提示,我可以看到默认的系统工具提示样式与自绘工具提示"战斗".
实际上,使用.Net 2.0,ToolTip对象已被更改.在2.0之前,当ToolTip处于活动状态或其他一些情况时更改ToolTip文本时会出现一些不一致问题.从2.0开始,每当发生可能影响当前活动工具提示的事件时,都会隐藏工具提示.
虽然这解决了一些问题,现在会导致后马上被解雇的一些事件如SetToolTip(),即使该功能已经从这个非常事件中调用,从而在工具提示抽奖/隐藏的无限循环,直到鼠标从移开工具提示区域.
我自己的解决方法是检查工具提示是否已经相同,如果是这样则省略Set ToolTip().(如上所述,通过静态标志省略下一个事件可能会导致问题,因为无法保证之后会有新事件,例如,如果鼠标刚刚触及ToolTip区域并已经移开).
此外,使用OnMouseHover仅显示工具提示会禁用ToolTip组件的内部计时器功能,并导致许多不必要的事件,从而浪费处理器时间.ToolTip组件的Popup事件很适合作为操作点.
但是,在这种特殊情况下,OnMouse Hover是跟踪鼠标移动所必需的.无论如何,改变ToolTip位置会导致Tooltip的完全重绘,从而导致闪烁.通过检查鼠标位置是否在两个事件之间发生了变化,可以减少静止鼠标的速度.不幸的是,ToolTip组件无法更改ToolTip的位置,adn始终相对于当前鼠标位置显示.所以让它跟随鼠标的唯一方法是关闭并重绘它.
它可能有助于将UseFading和/或UseAnimation属性设置为false,因此可以进一步减少闪烁.