如何使用默认文本填充空文本框?

时间:2011-03-03 08:28:23

标签: .net vb.net winforms textbox

如果文本框为空,如何填充文本框?我正在使用VB.NET。

5 个答案:

答案 0 :(得分:17)

看起来您正在描述提示横幅,这是一个显示在空文本框中的提示文字。从Windows XP开始,操作系统本身支持此功能。以这种方式实现的效果比在TextChanged事件中自己设置默认文本要优雅得多。它看起来像这样:

sample of textbox with cue banner text

通过发送文本框控件EM_SETCUEBANNER message,可以在Windows API级别完成此设置。要从.NET项目中使用它,您必须使用P / Invoke。

幸运的是,大部分工作已经为您完成。 This sample project是一种快速,轻松的方式,可以为现有项目添加cue banner支持。 Here's another sample,对该过程有更完整的解释。

如果您不希望应用程序依赖外部DLL,则可以将必要的代码直接添加到项目中。最简单的方法是对现有的TextBox控件进行子类化,并添加代码以支持那里的cue横幅。有关您需要的代码,请参阅this answer。如果您将其转换为VB.NET时遇到问题,请尝试this tool

答案 1 :(得分:3)

如果事件被触发,如果文本框为空,您可能希望处理TextChanged事件并设置一些默认文本。

我没有VB.NET示例,但下面的C#应该太难理解了:

public Form1()
{
    this.InitializeComponent();

    textBox1.Tag = "Default text";
    textBox1.Text = (string)textBox1.Tag;
    textBox1.TextChanged += new EventHandler(OnTextChanged);
}

void OnTextChanged(object sender, EventArgs e)
{
    var textbox = (TextBox)sender;

    if (string.IsNullOrEmpty(textbox.Text))
    {
        textbox.Text = (string)textbox.Tag;
    }
}

事件处理程序可以重复用于几个文本框。

编辑:这在VB.NET中几乎相同

Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    TextBox1.Tag = "Default text"  ' This can be set with the designer
    TextBox1.Text = CStr(TextBox1.Tag)
End Sub

Private Sub OnTextBoxTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Dim textbox As TextBox = DirectCast(sender, TextBox)

    If String.IsNullOrEmpty(textbox.Text) Then
        textbox.Text = CStr(textbox.Tag)
        textbox.SelectAll()
    End If
End Sub

当然,您也可以使用本机Windows功能实现类似的行为,但即使您不想使用Win32,只需几行托管代码即可为您提供所需的全部功能。

答案 2 :(得分:2)

文本框中的默认文本处理

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TextBox1.Text = "Default Text" ' initialize the text box 
End Sub

当光标位于文本框中时清除文本

Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_GotFocus
    TextBox1.Text = "" ' clear the text box for typing
End Sub

如果数据更改后文本框保持为空,则默认文本会再次出现

Private Sub TextBox1_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_LostFocus
    TextBox1.Text = "" ' clear the text box for typing
End Sub

答案 3 :(得分:0)

你在找这样的东西吗?

If Textbox.Text = string.Empty Then
TextBox.Text = "Default Text"
End If

答案 4 :(得分:0)

我会创建一个继承TextBox的类,并用它做两件事:

  • 添加DefaultText字符串属性
  • 如果新Text值为String.Empty
  • ,则覆盖Text setter以始终设置此DefaultText