如何实施就地工具提示

时间:2012-02-12 13:03:47

标签: c# winforms tooltip

如何为我较长的控制文本设置就地工具提示,如下所示: enter image description here

我已经使用ToolTip.Show方法

使用了这种类型的工具提示
ToolTip ttpInplace = new ToolTip();
ttpInplace.Show(textbox1.Text, textbox1, 0, 0, 4000);

        private void FormToolPopup_MouseEnter(object sender, EventArgs e)
        {
            if (ttpCustomToolTip != null)
            {
                ttpCustomToolTip.Hide(textBox1);
            }
        }

        private void textBox1_MouseEnter(object sender, EventArgs e)
        {
            Size s = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
            if (s.Width > textBox1.Width)
            {
                ttpCustomToolTip.Show(textBox1.Text, textBox1, -4, 0);//, 5000);
            }
        }

但它闪烁着。 我读过这篇文章 http://msdn.microsoft.com/en-us/library/windows/desktop/hh298402(v=vs.85).aspx 但我有问题要实现,因为它是在C ++中。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

是的,它会因为您在与鼠标相同的位置显示工具提示而闪烁。因此工具提示会立即获得鼠标移动消息。这使得提示消失了。这导致MouseEnter事件再次触发。 Etcetera,flickorama。

一种解决方法是捕获鼠标,使其无法向工具提示发送消息:

   textBox1.Capture = true;
   ttpCustomToolTip.Show(textBox1.Text, textBox1, -4, 0);//, 5000);

用户单击鼠标时会自动取消捕获。可能足够好,你可能不得不把它设置回假。要看。最好的办法是实现MouseMove事件,并在看到它移动到控件之外时取消工具提示和捕获。您还必须做一些事情来使文本框可用,您的工具提示阻止访问。至少有一个原因,你不经常看到这个使用。如果不打算编辑,请务必使用标签。请注意其AutoEllipsis属性。