Windowsフォームを使って別フォームを開くときの基本処理です。
何かアクションを起こしたとき(ボタンを押す、ダブルクリックする)に別のフォームに遷移(処理を移動)させたいときの処理です。
この記事では、Form1からForm2を表示させる処理を行ってみます。
プロジェクトの準備
Visual Studioを起動してメニューからプロジェクトの新規作成を選び、
テンプレート >Visual C# >Windowsフォームアプリケーション
を選択します。
プロジェクト名は、別フォームを開くとしておきます。
デフォルトでは、Form1.csがWinsdowsフォームとして作成されています。
このフォームから別のフォームに遷移するアプリを作ります。
フォームを追加する
Form1からの移動先フォームを作ります。
ソリューションエクスプローラのプロジェクト名別フォームを開くを右クリックして
追加 >新しい項目…
を選択します。
新しい項目の追加ウインドウが開きます。
Windowsフォームを選択してください。名前は、デフォルトのForm2.csのまま追加ボタンをクリックします。
ソリューションエクスプローラで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();
Form1はクリックしても前面にはなりません。Form2を閉じてからでないとForm1を操作できないようになります。
これがダイアログ形式というフォームの表示方法です。
ShowとShowDialogは、必要に応じて使い分けてください。
以上、Windowsフォームを使って別フォームを開くときの処理でした。
コメント