1

Textboxいくつかのプリセットテキストを含む登録フォームに6つあります。TextboxforをクリックするとName、プリセットテキストが消えます...テキストボックスに何も書かずにforをEnter your full nameクリックすると、再び表示されます。このイベントはすべての myで発生するはずですが、それぞれのテキストが異なるはずです...すべてではありません。誰かがこれで私を助けてくれますか?TextboxEmailNameEnter 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

I solved my problem! Thanks to @rapsalands for providing the code. I have now modified it for my needs.

 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 に答える