透かし文字付きテキストボックス
Webアプリだと、jQueryなどを使用して、未入力状態のテキストボックスに対して、薄い文字でヘルプを表示させていたりしますね。その機能を、Visual C# でも使いたくなりました。で、ユーザコントロールを作成してみました。
WaterMarkTextBox.cs
using System; namespace UserControlApp { /// <summary> /// 透かし文字付きテキストボックス /// </summary> public class WaterMarkTextBox : System.Windows.Forms.TextBox { private String _helpText; private System.Drawing.Color _helpColor; private String _inputText; private System.Drawing.Color _inputColor; /// <summary> /// HelpTextプロパティ /// </summary> public String HelpText { get { return _helpText; } set { _helpText = value; UpdateText(Focused); } } /// <summary> /// HelpColorプロパティ /// </summary> public System.Drawing.Color HelpColor { get { return _helpColor; } set { _helpColor = value; UpdateText(Focused); } } /// <summary> /// InputTextプロパティ /// </summary> public String InputText { get { return _inputText; } set { _inputText = value; UpdateText(Focused); } } /// <summary> /// InputColorプロパティ /// </summary> public System.Drawing.Color InputColor { get { return _inputColor; } set { _inputColor = value; UpdateText(Focused); } } /// <summary> /// コントロール作成イベント /// </summary> protected override void OnCreateControl() { base.OnCreateControl(); _helpColor = System.Drawing.Color.LightGray; _inputColor = System.Drawing.SystemColors.WindowText; UpdateText(Focused); } /// <summary> /// フォーカスインイベント /// </summary> /// <param name="e"></param> protected override void OnEnter(EventArgs e) { //System.Console.WriteLine("--- OnEnter() ---"); base.OnEnter(e); Text = _inputText; UpdateText(true); } /// <summary> /// フォーカスアウトイベント /// </summary> /// <param name="e"></param> protected override void OnLeave(EventArgs e) { //System.Console.WriteLine("--- OnLeave() ---"); base.OnLeave(e); _inputText = Text; UpdateText(false); } /// <summary> /// テキスト内容更新 /// </summary> /// <param name="focused">フォーカス状態</param> private void UpdateText(bool focused) { //System.Console.WriteLine("--- UpdateText() ---"); if (!focused && string.IsNullOrEmpty(_inputText)) { Text = HelpText; ForeColor = HelpColor; } else { Text = InputText; ForeColor = InputColor; } //System.Console.WriteLine(Text); //System.Console.WriteLine(ForeColor); } } }
環境
- OS:Windows Vista
- Visual C#:2008 Express Edition