既定のボタンがあるフォームのテキストボックスでEnterキーで改行できるようにする [C#] TextBox

Windowsフォームアプリケーションのフォームに、複数行入力できるテキストボックスを配置している場合、テキストボックスにフォーカスがある状態でEnterキーを押すと、新しい行が作成(改行)されます。
しかし、フォームに既定のボタンが設定されていると、テキストボックス内でEnterキーを押しても、新しい行は作成されず、既定のボタンがクリックされてしまいます。

テキストボックスを複数行入力できるように設定する方法については、以下の記事を参考にしてください。

テキストボックスに複数行の文字列を入力できるように設定する [C#] TextBox
Windowsフォームアプリケーションのテキストボックス(TextBox)に改行(リターン)を入力できるようにする方法を紹介します。 ...

フォームの既定のボタンを設定する方法については、以下の記事を参考にしてください。

Enterキー、Esc キーが押された時にクリックされるボタン(実行ボタン、キャンセルボタン)を設定する [C#]
C#でWindowsフォームアプリケーションのフォームで、Enterキー(エンターキー)が押された時にクリックされるボタンと、Escキー(エ...

フォームに既定のボタンが設定されている状態では、テキストボックス内でEnterキーを押しただけでは改行して新しい行を作成することはできず、Ctrl + Enterキーを押すことで改行できます。

ユーザーがCtrlキーとEnterキーを押して改行する操作に慣れていれば問題ないですが、そうでなければ、テキストボックス内では改行するためにはCtrlキーとEnterキーを組み合わせて押さなければならないことをユーザーに知らせる必要があります。
また、ユーザービリティを考えると、Ctrlキーを押していなければ、Enterキーで改行できないのは、望ましいとは言えません。

そこで今回は、フォームに既定のボタンが設定されている場合でも、テキストボックス内でEnterキーを押すだけで改行して新しい行の作成ができるようにする方法について紹介します。

本記事では、Visual Studioで作成したC#のWindowsフォームアプリケーションのプロジェクトに記述するコードを記載します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。

Windowsフォームアプリケーションのプロジェクト(ソリューション)を作成する。[C#]
Visual StudioでC#のWindowsフォームアプリケーションのプロジェクト(ソリューション)を作成する方法を記載します。 ...

Enterキーで改行して新しい行の作成

フォームに既定のボタンが設定されている場合でも、Enterキーだけで改行して新しい行を作成するには、System.Windows.Forms名前空間のTextBoxクラスのAcceptsReturnプロパティを使用します。

AcceptsReturnプロパティは、デフォルト(既定値)でFalseに設定されているので、Enterキーのみでの改行を許可する場合は、Trueに設定します。

AcceptsReturnプロパティは、フォームデザイナーのプロパティグリッド、またはコードで設定することができます。

デザイナーのプロパティグリッドで設定する

フォームデザイナーを開きます。
フォームデザイナーを開いたら、プロパティウィンドウを表示します。
プロパティウィンドウが表示されていない場合は、メニューバーの「表示」メニューにある「プロパティ ウィンドウ」をクリックするかF4キーを押してください。
プロパティウィンドウが表示されたら、フォームに配置したテキストボックスをクリックして選択します。

フォームデザイナーのテキストボックスのプロパティグリッド
上記の画像のプロパティグリッドは項目別ではなくアルファベット順で表示しています。

デザイナーのプロパティグリッドにあるAcceptsReturnプロパティを選択します。
AcceptsReturnプロパティのドロップダウンリストボックスからTrueを選択します。

デザイナーのプロパティグリッドでTextBoxクラスのAcceptsReturnプロパティを設定

コードで設定する

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

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

サンプルプログラム

サンプルとしてWindowsフォームアプリケーションで、複数行のテキストを入力できるテキストボックスを配置して、フォームに配置したボタンを既定のボタンに設定したプログラムを作成します。

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

フォームには、テキストを複数行入力できるようにしたテキストボックス(textBox1)と、フォームの既定のボタンに設定するボタン(button1)と、AcceptsReturnプロパティの値のON(True)とOFF(False)を切り替えるラジオボタン(radioButton1とradioButton2)を配置します。

既定のボタンを設定したフォームでEnterキーのみで改行できるテキストボックスのサンプルフォームのデザイン

テキストボックスは、複数行入力できるようにMultilineプロパティの値をTrueに設定して、高さを広げておきます。

ソースコード

ラジオボタンがクリックされた時のイベント処理を記述します。
テキストボックスを複数行入力可能にする設定はコンストラクタで行います。

プログラムの実行

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

既定のボタンを設定したフォームでEnterキーのみで改行できるテキストボックスのサンプルフォーム

テキストボックスのAcceptButtonプロパティの既定値はFalseなので、テキストボックスでEnterキーを押しても、ボタンがクリックされた時のイベントが実行されます。

既定のボタンを設定したフォームでEnterキーのみで改行できるテキストボックスのサンプル AcceptButtonプロパティがFalseの時の動作

ONラジオボタンをクリックする(AcceptButtonプロパティをTrueに設定する)ことで、テキストボックス内でEnterキーを押して改行することができるようになります。

既定のボタンを設定したフォームでEnterキーのみで改行できるテキストボックスのサンプル AcceptButtonプロパティがTrueの時の動作