WinFormアプリケーションの開発において、複数のフォームを効果的に管理し、操作する能力は不可欠です。
この記事では、WinFormで新しいフォームを開く基本的な方法を説明します。特に、メインフォームから別のフォームを起動する方法と、データを渡しつつ新しいフォームを開く高度なテクニックを学びます。
より複雑でインタラクティブなデスクトップアプリケーションの開発への第一歩を踏み出しましょう!
OS:Windows 11 Home
開発環境:Visual Studio 2022 Community
フレームワーク:Windows Form Application .NET6
その他ライブラリ:なし
メインフォームを作成する
Visual Studio 2022を起動し、Windowsフォームアプリを作成します。
設定はすべてデフォルトでOKです。
プロジェクトを作成すると何もない状態のフォームが表示されました。
空のフォームができたら次は新たなフォームを作成しましょう!
新たなフォームを作成する
プロジェクトを右クリックして、
追加 → 新規項目
から、フォーム(Windowsフォーム)を追加します。ここではファイル名はForm2.csにしておきます。
Form2はわかりやすくするために小さめなサイズに変更しました。
メインフォームから新たなフォームを開く
追加のフォームが用意できたらメインフォームにボタンを設置しましょう。
ボタンクリックイベントにてForm2を呼び出します。
メインフォーム(Form1.cs)上にボタンを配置し、デザイナー上でダブルクリックするとコードに直接イベントが貼り付けられます。
(イベントプロパティからClickイベントを登録してもOKです)
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var Form2 = new Form2(); // Form2クラスのインスタンスを生成して表示する
Form2.Show(); // Form2を表示する
}
}
}
button1のクリックイベント内にForm2のインスタンスを作成し、表示するコードです。
動かしてみよう!
デバッグモードで動かしてみます。
表示できました。完成!
実践テクニック 引数を渡しつつ新たなフォームを開く
先程までのチュートリアルではただ単にボタンで別のフォームが起動するだけのものでした。しかし、さすがに味気ないのでここでひとつまみ。味を加えてみましょう。
Form1にテキストボックスを配置、Form2にはラベルを配置します。
Form1で入力したテキストをForm2へと送り、Form2で表示するプログラムです。
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var Form2 = new Form2(textBox1.Text); // Form2クラスのインスタンスを生成時に、textBox1のテキストを渡す
Form2.Show(); // Form2を表示する
}
}
}
Form1ではForm2インスタンスを生成する際にtextbox1.Textを渡すように修正します。
namespace WinFormsApp1
{
public partial class Form2 : Form
{
public Form2(string text)
{
InitializeComponent();
label1.Text = text;
}
}
}
Form2ではコンストラクタにてstring型の変数を引数に持ちましょう。
上記のコードには初学者向けにシンプルなコードとしているため、例外処理を含まずに記載しています。
入力なしの場合は処理しない、記号が含まれている場合は無視する、などの処理を省いています。
起動してみる
テキストボックスに程よいテキストを入力し、ボタンをクリックします。
テキストの文字列がForm2へと渡され、label1のテキストが変更されました。
さいごに
この記事では、Windows Form Applicationで新しいフォームを開く基本的な手順をご紹介しました。
これらの知識を実際のプロジェクトで応用し、より複雑なアプリケーションの開発にチャレンジしてみてください。
もしご質問やフィードバックがあれば、お気軽にコメントを残してください。
記事で使用したサンプルコードはGithubに置いています。
コメント