複数のフォームの作成をコンソールアプリでシミュレートしてみる

WindowsFormsアプリの動作をコンソールアプリでコード作成することで学習を進めます

Formクラスを継承したForm1クラスとForm2クラスを作成

それぞれは、Formクラスの特徴(属性)を持っていて、かつ独自の特徴(属性)も併せ持ちます

エントリーポイント(Mainメソッド)から、Form1のインスタンスを作成

まず、form1を作成します

form1(Form1クラスのインスタンス)からform2(Form2クラスのインスタンス)を作成

2つ目のフォームであるform2を作成します

form2のボタンをクリックすることでform1のラベルに文字を変更

ボタンクリックイベントでform1のラベルのプロパティを変更する

全体のコード

Form1 form1 = new Form1();

internal class Form1 : Form
{
    public Label label1;

    public Form1()
    {
        label1 = new Label();
        Form2 form2 = new Form2(this);
        form2.Show();
    }
}

public class Label
{
    public string Text { get; set; }
}

internal class Form2 : Form
{
    Form1 form1;

    public Form2(Form1 form1)
    {
        this.form1 = form1;

        Form1LabelAccessButton_Click();
    }

    public void Form1LabelAccessButton_Click()
    {
        form1.label1.Text = "Hello";
        Console.WriteLine(form1.label1.Text);
    }
}

internal class Form
{
    public void Show()
    {
        // フォームを表示する
    }
}

このコードは、Windows フォームアプリケーションを作成するためのコードです。Form1 クラスは、メインフォームを表し、Form2 クラスは、Form1 クラスの label1 コントロールにアクセスするためのフォームです。

Form1 クラスでは、label1 コントロールを作成し、Form2 クラスのインスタンスを作成して表示します。Form2 クラスでは、Form1 クラスのインスタンスを受け取り、Form1 クラスの label1 コントロールにアクセスしてテキストを設定し、コンソールに出力します。

また、Label クラスは、label1 コントロールの代わりに使用されるカスタムのラベルクラスであり、Text プロパティを持ちます。

Form クラスは、フォームの基本クラスであり、フォームの表示を担当します。

コメント付きコード

Form1 form1 = new Form1();  // Form1 クラスのインスタンスを作成し、変数 form1 に代入する

internal class Form1 : Form  // Form1 クラスを定義し、Form クラスを継承する
{
    public Label label1;  // label1 コントロールを保持する Label オブジェクトを宣言する

    public Form1()
    {
        label1 = new Label();  // label1 コントロールのインスタンスを作成する
        Form2 form2 = new Form2(this);  // Form1 クラスのインスタンスを引数に取り、Form2 クラスのインスタンスを作成する
        form2.Show();  // Form2 クラスのインスタンスを表示する
    }
}

public class Label  // Label クラスを定義する
{
    public string Text { get; set; }  // Text プロパティを宣言する
}

internal class Form2 : Form  // Form2 クラスを定義し、Form クラスを継承する
{
    Form1 form1;  // Form1 クラスのインスタンスを保持する変数を宣言する

    public Form2(Form1 form1)
    {
        this.form1 = form1;  // 引数で渡された Form1 クラスのインスタンスを保持する

        Form1LabelAccessButton_Click();  // Form1LabelAccessButton_Click メソッドを呼び出す
    }

    public void Form1LabelAccessButton_Click()
    {
        form1.label1.Text = "Hello";  // Form1 クラスの label1 コントロールのテキストを設定する
        Console.WriteLine(form1.label1.Text);  // コンソールに label1 コントロールのテキストを出力する
    }
}

internal class Form  // Form クラスを定義する
{
    public void Show()
    {
        // フォームを表示する
    }
}