テキストボックスにプレースホルダ―を設定する [C#] TextBox

テキストボックスにテキストが入力されていない状態の時に、入力内容や入力例が表示されていると、アプリケーションを使うユーザーはテキストボックスに入力するテキストをスムーズに入力することができます。このようなナビゲーション機能は、ユーザービリティを向上させます。

Windowsフォーム Placeholder TextBox プレースホルダーテキストボックス

今回は、Windowsフォームアプリケーションのテキストボックスに、プレースホルダー(初期表示文言)を設定する方法を紹介します。

プレースホルダーの表示 (.NET Core 3.0以上)

テキストボックスにテキストが未入力でフォーカスされていない場合にプレースホルダー(初期表示文言)を表示するするには、System.Windows.Forms名前空間にあるTextBoxクラスのPlaceholderTextプロパティを使用します。

PlaceholderTextプロパティ

フォームに「textBox1」という名前のテキストボックスを配置し、コードエディタを表示して以下のコードを入力します。

上記のコードはフォームのコンストラクタ内や、フォームのロードイベント(Form.Load)メソッド内、またはフォームのオンロード(OnLoad)メソッドをオーバーライドしたメソッド内に記述することで、フォームの起動時に設定することができます。

Windowsフォームデザイナー

通常版のVisual Studioでは、.NET CoreのWindowsフォームデザイナーが表示されませんが、Visual Studioのプレビュー版をインストールすれば表示できます。(2020年4月時点)

プレビュー版のインストールと、.NET CoreのWindowsフォームデザイナーを表示する方法については、以下の記事を参照してください。

.NET Core でWindowsフォームのデザイナーを表示する [C#]
.NET Core 3.0以降のバージョンでは、オープンソース化されたWPFおよびWindowsフォームを用いたデスクトップアプリケーション...

Windowsフォームデザイナーを表示します。

Windowsフォームアプリケーションのテキストボックスにプレースホルダーの表示 Windowsフォームデザイナー

フォームにテキストボックスを配置して選択します。

Windowsフォームアプリケーションのテキストボックスにプレースホルダーの表示 テキストボックスを配置して選択

デザイナーのプロパティグリッドにある「PlaceholderText」プロパティにプレースホルダーとして表示するテキストを入力します。

Windowsフォームアプリケーションのテキストボックスに表示するプレースホルダーのテキストを入力

PlaceholderTextプロパティ入力したテキストがプレースホルダーのテキストとして表示されます。

Windowsフォームアプリケーションのテキストボックスにプレースホルダーのテキストを表示

サンプルプログラム (.NET Core 3.0以上)

テキストボックスの文字の揃え位置を設定するサンプルプログラムを作成します。

ユーザーインターフェース

フォームには、プレースホルダーのテキストを表示するテキストボックス(textBox1)、プレースホルダ―のテキストを入力するテキストボックス(textBox2)、右揃えに設定するテキストボックス(button1)を配置します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームのデザイン

ソースコード

ボタンをクリックした時に、指定されたテキストをプレースホルダーのテキストに設定する処理を記述します。

プログラムの実行

プロジェクトをビルドして実行(デバッグ)してフォームを表示します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームを起動

テキストボックスに文字列を入力して揃え位置を確認します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームで文字列を入力

ボタンをクリックしてプレースホルダーのテキストを設定します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームでプレースホルダーのテキストを設定

テキストボックスにプレースホルダーのテキストが表示されます。

プレースホルダーの表示 (.NET Framework)

.NET FrameworkのWindowsフォームのTextBoxコントロールには、PlaceholderTextプロパティがありません。
ですので、.NET Coreのように簡単にプレースホルダーのテキストを設定することはできません。

.NET Core のTextBoxコントロールのPlaceholderTextプロパティと同様に設定して使うことができるように、テキストボックスにプロパティを追加して機能拡張したカスタムコントロールを作成します。

ソースコード

PlaceholderTextプロパティを追加したカスタムコントロールの実装例を以下に示します。

上記の例では、System.WindowsForms名前空間にあるTextBoxクラスを継承して、PlaceholderTextBoxクラスを作成しています。
継承したサブクラスのPlaceholderTextBoxコントロールにプレースホルダーのテキストを表示する処理を追加します。

プレースホルダーのテキストを表示する処理は、TextBoxクラスのWndProcメソッドをoverride(オーバーライド)して処理を実装します。
テキストボックスが描画(ペイント)される時に、プレースホルダーの描画処理を行います。
テキストボックスにフォーカスがなく、テキストも入力されていない場合は、PlaceholderTextプロパティに設定されているテキストをプレースホルダーのテキストとして、DoawStringメソッドで描画します。
プレースホルダーのテキストを描画する際は、いったnテキストボックスの背景色で塗りつぶしてから文字列を描画がします。

ここで作成するコントロールには、プレースホルダーのテキストを表示する文字の色を設定できるようにPlaceholderColorプロパティも追加しています。
PlaceholderColorプロパティは値が設定されていない(Color.Emptyの)場合は、テキストボックスの背景色(BackColor)と前景色(ForeColor)の間の色をデフォルト(既定値)で設定するようにしています。

サンプルプログラム (.NET Framework)

作成したプレースホルダーを表示するプロパティを持つPlaceholderTextBoxコントロールをフォームに配置します。

ユーザーインターフェース

フォームには、プレースホルダーのテキストを表示するテキストボックス(textBox1)、プレースホルダ―のテキストを入力するテキストボックス(textBox2)、右揃えに設定するテキストボックス(button1)を配置します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームのデザイン

ソースコード

ボタンをクリックした時に、指定されたテキストをプレースホルダーのテキストに設定する処理を記述します。

プログラムの実行

プロジェクトをビルドして実行(デバッグ)してフォームを表示します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームを起動

テキストボックスに文字列を入力して揃え位置を確認します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームで文字列を入力

ボタンをクリックしてプレースホルダーのテキストを設定します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームでプレースホルダーのテキストを設定

テキストボックスにプレースホルダーのテキストが描画(表示)されます。

テキストボックスにフォーカスを移動してみます。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームでプレースホルダーのテキストを表示するテキストボックスにフォーカスを移動

フォーカスされている状態では、プレースホルダーのテキストは描画されません。

テキストボックスに文字を入力して、フォーカスを外します。

テキストボックスのPlaceholderTextプロパティ設定用のサンプルフォームでプレースホルダーのテキストを表示するテキストボックスに文字列を入力してフォーカスを移動

テキストが設定されている状態では、プレースホルダーのテキストは描画されません。