【问题标题】:Adding tool tip to dithered text box向抖动文本框添加工具提示
【发布时间】:2016-09-25 14:55:51
【问题描述】:

我正在尝试将工具提示添加到 winform 中的抖动文本框。要添加工具提示,需要鼠标悬停事件,但在抖动文本框的情况下,不会触发鼠标悬停事件。有没有其他方法可以为鼠标悬停添加工具提示?

当用户将鼠标悬停在这个抖动的文本框上时,文本框的全部内容应显示在工具提示中。

【问题讨论】:

  • 抖动的TextBox是什么意思?
  • 'TextBox' 不可编辑且无法控制。它基本上表现为“标签”。
  • 你是设置Enabled=false还是设置ReadOnly=true
  • Enabled 设置为 false,ReadOnly 设置为 true。
  • 启用true 并尝试suggestion

标签: c# winforms tooltip


【解决方案1】:

当鼠标第一次悬停在 TextBox 上时,ToolTip 不显示。

似乎TextBox 的工具提示只出现在第二次悬停事件中。 TextBox 是否为ReadOnly 并不重要。但作为一种解决方法,您可以自己处理MouseHoverMouseLeave 事件并编写这样的代码:

private void textBox1_MouseHover(object sender, EventArgs e)
{
    var point = this.textBox1.PointToClient(Cursor.Position);
    point.Offset(0, 20);
    this.toolTip1.Show("Some Text", this.textBox1,
        point, 2000);
}
private void textBox1_MouseLeave(object sender, EventArgs e)
{
    this.toolTip1.Hide(this.textBox1);
}

这是修复前的行为截图:

修复后的截图:

【讨论】:

  • 你确定吗?我目前没有运行带有 Visual Studio 的 VM,但我之前肯定已经注意到这个错误。如果您创建 ToolTIp 控件并将其与表单构造函数 (SetToolTip) 中的正确控件相关联,您仍然会看到这种延迟吗?没有理由手动调用 Show 方法。我听说过 a tooltip won't reappear on subsequent invocations 的错误,但不是说它出现在后续调用中。
  • @CodyGray 第一个屏幕截图是正常行为(可能是错误)。我在表单上放置了一个工具提示组件,并在设计时为文本框设置了工具提示。然后我运行代码,你可以看到结果。工具提示不会在第一次悬停时显示,它会在第二次悬停时显示。我只使用一个工具提示组件。 关于手动调用 show 我也不想手动调用 show,但经过一些尝试和错误,这是我可以获得的最佳结果。 当前问题不是重新出现,问题事件是第一次出现。
【解决方案2】:

试试下面的代码:

        TextBox TB = (TextBox)sender;
        int VisibleTime = 1000;  //in milliseconds

        ToolTip tt = new ToolTip();
        tt.Show("Test ToolTip",TB,0,0,VisibleTime);

使用 X/Y 值将其移动到您想要的位置。可见时间是它消失的时间。

【讨论】:

  • 不要“玩弄 X/Y 值”。使用ToolTip.Show 的重载,它接受一个控制对象并自动确定正确的位置。
  • 是的,但是当文本框抖动时,控件不会去那里。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2012-07-17
  • 2021-01-29
相关资源
最近更新 更多