C#:別フォームを開く

別フォームを開くの画像C#
スポンサーリンク

Windowsフォームを使って別フォームを開くときの基本処理です。
何かアクションを起こしたとき(ボタンを押す、ダブルクリックする)に別のフォームに遷移(処理を移動)させたいときの処理です。
この記事では、Form1からForm2を表示させる処理を行ってみます。

スポンサーリンク

プロジェクトの準備

Visual Studioを起動してメニューからプロジェクトの新規作成を選び、

テンプレート >Visual C# >Windowsフォームアプリケーション

を選択します。

プロジェクト名は、別フォームを開くとしておきます。

デフォルトでは、Form1.csがWinsdowsフォームとして作成されています。
このフォームから別のフォームに遷移するアプリを作ります。

フォームを追加する

Form1からの移動先フォームを作ります。

ソリューションエクスプローラのプロジェクト名別フォームを開くを右クリックして

追加 >新しい項目…

を選択します。

フォームの追加手順1の画像

新しい項目の追加ウインドウが開きます。
Windowsフォームを選択してください。名前は、デフォルトのForm2.csのまま追加ボタンをクリックします。

フォームを追加する手順2の画像

ソリューションエクスプローラでForm2.csが追加されていることを確認してください。

フォームを追加後の確認画像

このまま実行(F5)をしてもForm1が表示されるだけです。
起動時のフォームは、Program.csに記述されています。

起動時のフォーム設定画像

Application.Run(new Form1());

例えば、このForm1の部分をForm2に変更すれば起動時のフォームはForm2となります。

ボタンクリックでForm2を表示させる

ボタンイベントでForm2を表示させてみます。
Form1のデザイン画面で、ツールボックスからButtonを選択してフォームに貼り付けます。
button1のTextプロパティは、適当にForm2を表示としておきます。

フォームにボタンを作成画像

考え方としては、先ほどプロジェクトに追加したForm2.csで定義されているForm2クラスのインスタンスを生成する、ということになります。

// Form2のインスタンスを生成
Form2 form2 = new Form2();

ただ、インスタンスを生成したただけではメモリに読み込まれているだけですので画面に表示されません。
フォームのShowメソッドを使って画面に表示させます。

// form2を表示
form2.Show();

button1をダブルクリックしてボタンクリック時のイベントコードを表示させ上記コードを入力した状態です。

private void button1_Click(object sender, EventArgs e)
{
	// Form2のインスタンスを生成
	Form2 form2 = new Form2();
	// form2を表示
	form2.Show();
}

通常フォームとして表示する方法とダイアログとして表示する方法

上記ボタンイベントコードを入力後、一度実行確認してみます。

別フォームを開くの画像

1つ問題があります。
上記の画像のようにForm1のボタンを押すたびに、その都度Form2が生成されてしまうことです。
目的のアプリケーションがボタンを押すたびにフォームを表示する場合であれば問題ありませんが、そういったアプリは多くはないでしょう。

フォームのShowメソッドとは異なり、フォームをダイアログ形式で表示するShowDialogメソッドも用意されています。
ShowDialogで開いたフォームは、そのフォームを閉じない限り別フォームを前面にすることが出来ない仕組みです。
一般的なアプリは、ShowDialog形式で画面遷移していると思います。

コードのShow()の部分をShowDialog()に変えて実行してみてください。

// form2を表示
form2.ShowDialog();

ShowDialogでフォームを開くの画像

Form1はクリックしても前面にはなりません。Form2を閉じてからでないとForm1を操作できないようになります。
これがダイアログ形式というフォームの表示方法です。
ShowとShowDialogは、必要に応じて使い分けてください。

以上、Windowsフォームを使って別フォームを開くときの処理でした。

コメント