1

C#Windowsフォームアプリで、ユーザーがテキストボックスをクリック(またはタブ)したときに、デフォルトのテキストがクリアされ、フォントスタイルがWindowsのデフォルトに戻るようにプログラムで設定するにはどうすればよいですか?

テスト用の基本的なフォームを作成しています。私は非常に多くの異なることを試みたので、私が使用している失敗したコードを含めるつもりはありません。空白を埋めるのを手伝ってもらう必要があります。textBoxのテキストは灰色で斜体になります。テキストボックスをタブで移動するかクリックすると、テキストが消え、フォントのスタイルと色をWindowsのデフォルトに戻す必要があります。私は一日中これをいじって過ごしました、そしてそれは単純であるべきだと私は知っています、しかし私は私の人生のためにそれを理解することができません。SOS!Webで目にするほとんどの情報には、ASP、HTML、およびJavaが含まれていますが、C#の例に出くわすことはできません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_Click(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

    }

}
}

私は広範囲にわたって検索しましたが、C#で書かれた良い例を見つけることができません。数日前にページを横切ったのですが、まだ発売されていなかったので気にせず、二度と見つかりません。私はいくつかの方法を試しましたが、今はすべて混乱しています。

4

2 に答える 2

2

テキストが変更されたことを示す値を格納する必要があります。次のような派生 TextBox を作成することを検討します。

/// <summary>
/// Represents a Windows TextBox control that displays placeholder text when the
/// control is empty.
/// </summary>
public class PlaceholderTextBox : TextBox
{
    private bool _set;
    private Color _valueForeColor;
    private Color _valueBackColor;
    private Font _valueFont;
    private Color? _PlaceholderForeColor;
    private Color? _PlaceholderBackColor;
    private Font _PlaceholderFont;

    /// <summary>
    /// Gets or sets the text that is shown when the <see cref="TextBox"/> is empty.
    /// </summary>
    [Browsable(true)]
    [Category("Appearance")]
    [Description ("The text that is shown when the TextBox is empty.")]
    [DefaultValue("")]
    public string PlaceholderText { get; set; }

    /// <summary>
    /// Gets or sets the <see cref="Color"/> of the placeholder text.
    /// </summary>
    [Browsable(true)]
    [Category("Appearance")]
    [Description("The color of the placeholder text.")]
    public Color PlaceholderForeColor
    {
        get { return _PlaceholderForeColor ?? _valueForeColor; } 
        set
        {
            if (value == _valueForeColor)
                _PlaceholderForeColor = null;
            else
                _PlaceholderForeColor = value;
        }
    }

    /// <summary>
    /// Gets or sets the <see cref="Color"/> of the background when displaying placeholder text.
    /// </summary>
    [Browsable(true)]
    [Category("Appearance")]
    [Description("The color of the background when displaying placeholder text.")]
    public Color PlaceholderBackColor
    {
        get { return _PlaceholderBackColor ?? _valueBackColor; } 
        set
        {
            if (value == _valueBackColor)
                _PlaceholderBackColor = null;
            else
                _PlaceholderBackColor = value;
        }
    }

    /// <summary>
    /// Gets or sets the <see cref="Font"/> used by the control when displaying placeholder text.
    /// </summary>
    [Browsable(true)]
    [Category("Appearance")]
    [Description("the Font used by the control when displaying placeholder text.")]
    public Font PlaceholderFont
    {
        get { return _PlaceholderFont ?? Font; }
        set { _PlaceholderFont = value.Equals(Font) ? null : value; }
    }

    /// <summary>
    /// Gets or sets the foreground color of the control.
    /// </summary>
    /// <returns>
    /// A <see cref="Color"/> that represents the control's foreground color.
    /// </returns>
    public override Color ForeColor
    {
        get { return _valueForeColor; }
        set
        {
            _valueForeColor = value;
            if(_set)
                base.ForeColor = value;
        }
    }

    /// <summary>
    /// Gets or sets the background color of the control.
    /// </summary>
    /// <returns>
    /// A <see cref="Color"/> that represents the background of the control.
    /// </returns>
    public override Color BackColor
    {
        get { return _valueBackColor; }
        set
        {
            _valueBackColor = value;
            if(_set)
                base.BackColor = value;
        }
    }

    /// <summary>
    /// Gets or sets the font of the text displayed by the control.
    /// </summary>
    /// <returns>
    /// The <see cref="Font"/> to apply to the text displayed by the control. 
    /// The default is the value of the <see cref="Control.DefaultFont"/> property.
    /// </returns>
    public override Font Font
    {
        get { return _valueFont; }
        set
        {
            _valueFont = value;
            if(_set)
                base.Font = value;
        }
    }


    public PlaceholderTextBox()
    {
        _valueForeColor = base.ForeColor;
        _valueBackColor = base.BackColor;
        _valueFont = base.Font;
    }


    /// <summary>
    /// Raises the <see cref="E:System.Windows.Forms.Control.GotFocus"/> event.
    /// </summary>
    /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param>
    protected override void OnGotFocus(EventArgs e)
    {
        if (!_set)
        {
            Text = String.Empty;
            base.ForeColor = _valueForeColor;
            base.BackColor = _valueBackColor;
            base.Font = _valueFont;
            _set = true;
        }

        base.OnGotFocus(e);
    }

    /// <summary>
    /// Raises the <see cref="E:System.Windows.Forms.Control.LostFocus"/> event.
    /// </summary>
    /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data. </param>
    protected override void OnLostFocus(EventArgs e)
    {
        if (Text == String.Empty)
        {
            Text = PlaceholderText;
            base.ForeColor = PlaceholderForeColor;
            base.BackColor = PlaceholderBackColor;
            base.Font = PlaceholderFont;
            _set = false;
        }

        base.OnLostFocus(e);
    }
}
于 2013-03-21T21:42:46.490 に答える
1

イベントはあなたのGotFocusために働くでしょうか?

于 2013-03-21T21:35:40.507 に答える