1

我在注册表中有 6Textbox个带有一些预设文本的注册表单。当我单击TextboxforName然后预设文本Enter your full name应该消失...如果我然后单击Textboxfor而不在Textbox 中Email写入任何内容,那么应该会再次出现。这个事件应该发生在所有 my中,但它们在每个中应该是不同的文本......而不是在所有这些中。有人可以帮我吗?NameEnter your full nameTextboxTextboxEnter your full name

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

 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;
    }
4

2 回答 2

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;
    }
}

如果您需要任何进一步的信息,请告诉我。作为一个不,您也可以_text作为公共属性并使用它来设置所需的文本属性。

希望能帮助到你。

于 2013-02-19T15:01:12.513 回答
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;
    }
}

}

于 2013-02-21T08:44:14.040 回答