在文本框中的光标上方显示工具提示

时间:2018-08-17 20:11:28

标签: c# .net winforms textbox tooltip

我正在Winforms(.NET Framework 4.7.2)中的项目上工作,并且希望在文本框控件中的光标上方显示气泡工具提示。这是我目前拥有的:

What I currently have

这就是我想要的:

What I would like

我已经尝试了SetToolTip()Tooltip.Show()方法,但是无法使工具提示显示在文本框光标上。 我该如何做到?

1 个答案:

答案 0 :(得分:2)

您可以使用win32函数GetCaretPos获取光标(插入符号)的位置,然后将该位置传递给ToolTip.Show()方法。

首先,将以下内容添加到您的班级(preferably, a separate static class for native methods):

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCaretPos(out Point lpPoint);

然后,您可以执行以下操作:

ToolTip tTip = new ToolTip();
tTip.IsBalloon = true;
tTip.ToolTipIcon = ToolTipIcon.Error;
tTip.ToolTipTitle = "Your title";

Point p;
if (GetCaretPos(out p))
{
    // This is optional. Removing it causes the arrow to point at the top of the line.
    int yOffset = textBox1.Font.Height;
    p.Y += yOffset;

    // Calling .Show() two times because of a known bug in the ToolTip control.
    // See: https://stackoverflow.com/a/4646021/4934172
    tTip.Show(string.Empty, textBox1, 0);
    tTip.Show("Your message here", textBox1, p, 1000);
}

注意:

我两次调用ToolTip.Show()方法,第一次是使用空字符串,且持续时间为0 ms,这是因为ToolTip控件中的一个已知错误导致气球箭头未在第一个指向正确的位置时间被称为。检查this answer了解更多信息。