在文本框输入时显示工具提示

23

我有一个需要以特定方式输入数据的文本框。我已实现一些单元格验证技术,以在输入数据后检查数据,但我想在用户输入数据之前提供一些信息。

为此,我想向文本框添加一个工具提示,当用户进入文本框时弹出,然后在他们开始输入时退出。

例如,我有以下代码:

private void YearEdit_Enter(object sender, EventArgs e)
  {
        ToolTip tt = new ToolTip();
        tt.IsBalloon = true;
        tt.InitialDelay = 0;
        tt.ShowAlways = true;
        tt.SetToolTip(YearEdit, "Enter 4 digit year.");
    }

当用户输入文本框时,将执行此操作,然而只有当鼠标悬停在文本框上时,工具提示才会出现。有人有什么想法来解决这个问题吗?我认为也许tt.ShowAlways = true可以起作用,但显然不行。


把代码放在“GotFocus”事件中,然后在“LostFocus”事件中关闭它怎么样? - jzworkman
3
做这件事情的礼貌方式是设置控件的CueText,当控件为空时会呈现为一种类似于水印的东西。这样视觉效果很好且不会干扰用户。 - EricLaw
5个回答

35

挂钩到文本框的enter事件并使用以下代码:

private void textBox1_Enter(object sender, EventArgs e)
    {
        TextBox TB = (TextBox)sender;
        int VisibleTime = 1000;  //in milliseconds

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

通过调整X/Y值,将其移动到所需位置。可见时间是指它消失之前的时间。


1
太好了。位置是相对于文本框TB的,因此应该从(0,0)开始设置。 - Lukas Bystricky
没错,我最初将其设置为父窗口,并添加了X/Y位置以将其移回。代码将被修订。 - Lee Harrison

3

设计上,鼠标停留时才会出现工具提示。

您可以尝试将 InitialDelay 设置为 0:

tt.InitialDelay = 0;

但是这仍然需要鼠标静止一瞬间。然而,还有其他方法。一种常见的显示所需输入的方法是在文本框中使用水印(淡化文本),以显示所需的格式,直到用户开始键入。如果您真的想要工具提示,那么您可以添加一个信息图标(通常是“i”),当其悬停时将显示工具提示,或者自己实现。如果你将日期分成几个部分(单独的日、月、年),也可能起作用。这将允许您更多地控制用户可以输入什么 - 月份可以变成下拉/组合框,因此它始终是正确的格式。

3
您可以像这样显示工具提示:
ToolTip t = new ToolTip();
t.Show("Hello World", textBox1, 1000);

1

尝试这样做(基于上面的答案):为您想要拥有工具提示的所有控件添加事件处理程序。将所有事件处理程序指向同一个方法。然后构建您的处理方法如下:

private void procToolTips(object sender, EventArgs e)
{
   ToolTip tt = new ToolTip();
   Control o = (Control)sender;
   if ( o.Name == "label1") {
     tt.Show("Lorem ipsum dolor sit ame", o, 1000);
   }
}

0
你应该使用 if (o.Name == label1.Name) 而不是 if (o.Name == "label1"),因为如果你重命名 label1,这行代码也会被修改。
更多: if(o.equals(label1))...

1
这更像是对上面答案的评论,我很感激您没有足够的声望来发表评论,但作为一个孤立的答案并不合理(特别是答案出现的顺序可能会改变),最好从用户2283985给出的答案中提取文本,并将其更改以包括您所写的内容(这肯定是有效的)。 - d219

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接