c# - 为什么不显示指向正确控件的气球提示?

标签 c# .net winforms textbox tooltip

我在我的表单上使用了一个 ToolTip 控件,但我发现即使我的光标在一个控件上,工具提示也会显示在其他地方。我想在我的光标所在的控件中显示它。

alt text

如上图所示,当我的光标位于 Textbox3 上时,工具提示显示在 Textbox4 上。我希望它显示为指向 Textbox3

我目前正在使用以下代码在 3 个不同的事件中显示工具提示:

 private void txtImmediateddest_Enter(object sender, EventArgs e)
 {
     ttpDetail.Show("Ex:111000025", txtImmediateddest);
 }

 private void txtImmediateddest_MouseHover(object sender, EventArgs e)
 {
     ttpDetail.Show("Ex:111000025", txtImmediateddest);
 }

  private void txtImmediateddest_MouseUp(object sender, MouseEventArgs e)
  {
      ttpDetail.Show("Ex:111000025", txtImmediateddest, e.Location);
      //toolTipimmeddest.Show("Required & Must be 9 Digits", txtImmediateddest);
  }

编辑

 private void textBox1_MouseHover(object sender, EventArgs e)
    {
        ttpDetail.AutoPopDelay = 2000;
        ttpDetail.InitialDelay = 1000;
        ttpDetail.ReshowDelay = 500;
        ttpDetail.IsBalloon = true;
        //ttpDetail.SetToolTip(textBox1, "Ex:01(Should be Numeric)");
        ttpDetail.Show("Ex : 01(Should Be Numeric)", textBox1,textBox1.Width, textBox1.Height/10,5000);
    }

这工作正常但是当鼠标最初放在控件上时它显示正常如果我第二次它显示正确

请看下面的图片

alt text

alt text

最佳答案

您看到的问题是因为您的ToolTip 控件的IsBalloon property设置为“真”。设置此属性后,ToolTip 不会更改其相对位置,从而导致气球的箭头指向错误的控件。

这是一个证明这种现象的并排比较:

显然,简单的解决方法是通过将 IsBalloon 属性设置为“False”来禁用它。控件将恢复显示标准的矩形工具提示窗口,该窗口看起来正确对齐。

如果您不能接受,则必须指定希望工具提示气球出现的确切位置。不幸的是,ToolTip 控件中似乎存在错误,导致它在第一次附加到控件时无法正确显示。这通常可以通过使用空字符串调用一次 Show 方法来解决。例如,使用以下代码:

private void txtImmediateddest_Enter(object sender, EventArgs e)
{
    ttpDetail.Show(string.Empty, textBox3, 0);
    ttpDetail.Show("Ex:111000025", textBox3, textBox3.Width / 2, textBox3.Height, 5000);
}

产生这个结果:

当然,走这条路时您的运气也可能会有所不同。我一般不使用内置的 ToolTip 控件来编辑控件(例如文本框和组合框)。我发现 P/Invoke SendMessage 更可靠, 指定 EM_SHOWBALLOONTIP和一个 EDITBALLOONTIP structure包含有关我要显示的工具提示的信息。我将查找适当的定义并编写包装代码作为读者的练习,因为这个答案已经太长了。

关于c# - 为什么不显示指向正确控件的气球提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645614/

相关文章:

c# - DropShadowEffect 到 XAML 中的特定元素

c# - 在制作 Comparable 类(class)时遇到问题

c# - 表单应用程序中的错误范围

c# - 无法让 DateTime.TryParseExact 工作

c# - 如何让数据字段功能更改为从 EPPlus 中的总和计数?

c# - 避免 CopyFilesToOutputDirectory 构建步骤

asp.net - 不同的EntityFramework并排在同一个解决方案中?

.net - 为什么 Visual Studio 在 Azure DevOps checkin 时排除 BIN 和 OBJ 文件夹

c# - 图像未绘制在正确的位置

c# - DateTimePicker 获取焦点字段