【发布时间】:2014-10-11 20:13:05
【问题描述】:
我在使用 mousemove 事件显示工具提示时遇到了一些麻烦。基本上,当我的鼠标指针位于图片框的某些区域上时,我想显示一个工具提示。我正在尝试使用 mousemove 事件来完成此操作,确定指针是否位于最佳位置并(如果是)使用 settooltip 设置工具提示。
这是我的 mousemove 事件(因为我注意到在显示工具提示时会连续触发 mousemove,我检查位置是否真的改变了)
private void pbFaseFlow_MouseMove(object sender, MouseEventArgs e)
{
if (e.Location != OldPosition)
{
OldPosition = e.Location;
// determine text for tooltip (gets loaded into a global string)
DetermineText(Position);
// show the coords and tooltip text for debugging in some textbox
tbInfo.Text = e.X.ToString() + " " + e.Y.ToString() + " " + ToolTipText;
// show tooltip
if (ToolTipText != string.Empty)
{
toolTip.SetToolTip(pbFaseFlow, ToolTipText);
toolTip.Active = true;
}
else
{
toolTip.Active = false;
}
}
}
这一切正常,除了当我将鼠标移动到第一个像素的最佳位置时。在我的文本框中,我可以看到正在确定文本(比如“测试”fe),但工具提示没有显示。只有在我将鼠标再移动 1 个像素后,才会显示工具提示。这是一个问题,因为在甜蜜点上可能只有 1 个像素宽,所以当将鼠标从左向右移动时,工具提示不会显示(它会在向上/向下移动时显示......)
即使我没有检查真正改变的位置(我省略了 e.location 检查),在我将鼠标再移动 1 个像素之前,工具提示也不会显示。
我注意到,如果我从不让工具提示处于非活动状态,它确实有效,但我不希望在甜蜜点之外显示任何内容..
这里发生了什么?
---------编辑--------------
更多信息:
当我将代码更改为此(基本上总是显示工具提示,除了现在没有信息时只有一个空格),工具提示会立即在最佳位置更新。缺点是我现在有一个空的工具提示,当没有数据要显示时,总是显示,很烦人。
// show tooltip
if (ToolTipText != string.Empty)
{
toolTip.Active = true;
toolTip.SetToolTip(pbFaseFlow, ToolTipText);
}
else
{
toolTip.Active = true;
ToolTipText = " ";
toolTip.SetToolTip(pbFaseFlow, " ");
}
【问题讨论】:
-
那么如果你在这两行中切换顺序会发生什么
toolTip.SetToolTip(pbFaseFlow, ToolTipText); toolTip.Active = true; -
我在您的帖子中添加了
winforms标签。如果有误,请edit发帖。 -
没有变化,我已经试过了:-)
-
基本上,我感觉我的事件现在正在设置新的工具提示,但我需要做一些事情来触发工具提示显示(在这种情况下,将鼠标移动另一个像素)。有点像用 .invalidate 强制重绘画框,但现在是工具提示...我还尝试向 tooltip_popup 事件添加一些调试代码。当我在第一个像素中调用 settooltip 时,永远不会触发弹出事件。