.Net 文本框实现内容提示的实例代码(仿Google、Baidu)


在.NET中,实现文本框的内容提示(也称为占位符或水印文本)通常不是直接支持的功能,因为标准的WinForms或WPF文本框(TextBox)控件没有内置这个功能。但是,我们可以通过一些技巧来模拟这个效果。

以下是一个使用WinForms实现文本框内容提示的示例代码。这个例子展示了如何在文本框为空时显示灰色提示文字,当文本框获得焦点或用户开始输入时,提示文字消失。


using System;
using System.Drawing;
using System.Windows.Forms;

public class PlaceholderTextBox : TextBox
{
    private string placeholderText = "";
    private Color placeholderColor = Color.Gray;

    public PlaceholderTextBox()
    {
        this.ForeColor = Color.Black; // 设置默认文本颜色
        this.GotFocus += PlaceholderTextBox_GotFocus;
        this.LostFocus += PlaceholderTextBox_LostFocus;
        this.TextChanged += PlaceholderTextBox_TextChanged;
    }

    public string PlaceholderText
    {
        get { return placeholderText; }
        set
        {
            placeholderText = value;
            UpdatePlaceholder();
        }
    }

    public Color PlaceholderColor
    {
        get { return placeholderColor; }
        set { placeholderColor = value; }
    }

    private void UpdatePlaceholder()
    {
        if (string.IsNullOrEmpty(this.Text) && !this.Focused)
        {
            this.Text = PlaceholderText;
            this.ForeColor = PlaceholderColor;
        }
    }

    private void PlaceholderTextBox_GotFocus(object sender, EventArgs e)
    {
        if (this.Text == PlaceholderText)
        {
            this.Text = "";
            this.ForeColor = Color.Black;
        }
    }

    private void PlaceholderTextBox_LostFocus(object sender, EventArgs e)
    {
        UpdatePlaceholder();
    }

    private void PlaceholderTextBox_TextChanged(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(this.Text))
        {
            UpdatePlaceholder();
        }
    }
}

// 使用示例
// 假设您有一个Form,您可以在其中添加PlaceholderTextBox控件,并设置其PlaceholderText属性
// PlaceholderTextBox myTextBox = new PlaceholderTextBox();
// myTextBox.PlaceholderText = "请输入内容...";
// this.Controls.Add(myTextBox); // 假设this是指向Form的引用

注意,上面的代码是一个自定义的`PlaceholderTextBox`类,它继承自标准的`TextBox`控件。在这个类中,我们添加了`PlaceholderText`和`PlaceholderColor`属性来支持占位符文本和颜色。通过重写文本框的焦点事件和文本变更事件,我们能够在适当的时候显示或隐藏占位符文本。

在WPF中,实现类似的功能可能需要使用附加属性或自定义控件,因为WPF的TextBox控件同样没有直接支持占位符文本的功能。然而,WPF社区已经提供了许多现成的解决方案,您可以通过搜索“WPF TextBox Placeholder”来找到它们。