单击事件时文本在文本框中消失,并且在没有焦点时再次显示相同的文本?

时间:2013-02-19 10:47:41

标签: winforms c#-4.0 textbox onclick

我在注册表单中有6个Textbox,其中包含一些预设文字。 当我点击Textbox Name时,预设文字Enter your full name应该会消失...如果我点击Textbox Email而不写任何内容Name文本框,然后再显示Enter your full name。我的所有Textbox都应该发生此事件,但每个Textbox中的文本应该是不同的文本...所有文件都不是Enter your full name。有人可以帮我这个吗?

我现在使用的代码可以在我使用GotFocus事件点击它们时清除Textbox

 private void textBox1_GotFocus(Object sender, EventArgs e)
 {
     textBox1.Clear();
 }

在文本框中,我有预设文本....我希望每当我点击Textbox之外时,每个文本框的确切预设文本都会返回。 我听说过一个关于“占位符”的事情了吗?

以下是使用额外构造函数的外观。我无法弄清楚我做错了什么?

 public partial class CustomTextbox : TextBox
 {
    private const string _text = @"Enter your full name";
    private bool _isEmpty = true;

    public CustomTextbox()
    {

        base.ForeColor = SystemColors.GrayText;
        Text = _text;
        Leave += LeaveTextBox;
        Enter += EnterTextBox;
        TextChanged += TextChangedTextBox;
    }
    public CustomTextbox(string tempText)
    {

        base.ForeColor = SystemColors.GrayText;
        Text = tempText;
        Leave += LeaveTextBox;
        Enter += EnterTextBox;
        TextChanged += TextChangedTextBox;
    }

2 个答案:

答案 0 :(得分:2)

尝试创建继承自Textbox的自定义类。为此,请创建一个新的Usercontrol。删除基类名称并在其中放置Textbox。如果给出编译错误,删除设计器中的任何内容建立你的项目。您应该在工具箱中看到一个新控件。使用它,你很高兴。以下是Usercontol.cs

的代码
public partial class CustomTextbox : TextBox
{
    private const string _text = @"Enter your full name";
    private bool _isEmpty = true;

    public CustomTextbox()
    {
        InitializeComponent();
        base.ForeColor = SystemColors.GrayText;
        Text = _text;
        Leave += LeaveTextBox;
        Enter += EnterTextBox;
        TextChanged += TextChangedTextBox;
    }

    private void TextChangedTextBox(object sender, EventArgs e)
    {
        _isEmpty = string.IsNullOrEmpty(Text);
    }

    public override sealed string Text
    {
        set
        {
            base.Text = value;
        }
    }

    private void LeaveTextBox(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(Text))
        {
            Text = _text;
            _isEmpty = true;
            base.ForeColor = SystemColors.GrayText;
        }
        else
        {
            _isEmpty = false;
        }
    }

    private void EnterTextBox(object sender, EventArgs e)
    {
        if (_isEmpty)
            Text = string.Empty;

        base.ForeColor = SystemColors.ControlText;
    }
}

如果您需要任何进一步的信息,请与我们联系。作为not,您还可以将_text作为公共属性并使用它来设置所需的文本属性。

希望它有所帮助。

答案 1 :(得分:0)

我解决了我的问题! 感谢@rapsalands提供的代码。 我现在已根据自己的需要对其进行了修改。

 public partial class UserControl1 : UserControl
 {
    public UserControl1()
    {
        InitializeComponent();
    }
 }

public partial class CustomTextbox : TextBox
{

    private string defaultText;

    public string DefaultText
    {
        get { return defaultText; }
        set { defaultText = value; }
    }


    private bool _isEmpty = true;


    public CustomTextbox(string myText)
    {

        base.ForeColor = SystemColors.GrayText;
        this.Text = myText;
        this.DefaultText = myText;
        Leave += LeaveTextBox;
        Enter += EnterTextBox;
        TextChanged += TextChangedTextBox;
    }


    private void TextChangedTextBox(object sender, EventArgs e)
    {
        _isEmpty = string.IsNullOrEmpty(Text);
    }

    public override sealed string Text
    {
        set
        {
            base.Text = value;
        }
    }

    private void LeaveTextBox(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(Text))
        {
            Text = defaultText;
            _isEmpty = true;
            base.ForeColor = SystemColors.GrayText;
        }
        else
        {
            _isEmpty = false;
        }
    }

    private void EnterTextBox(object sender, EventArgs e)
    {
        if (_isEmpty)
            Text = string.Empty;

        base.ForeColor = SystemColors.ControlText;
    }
}

}