【学習】WinFormsの「ドラッグ&ドロップ」の正体を理解しよう(Label編)

広告

シリーズWinFormsの「ドラッグ&ドロップ」の正体

WinForms で開発をしていると、ツールボックスから Label をドラッグ&ドロップするだけで画面に表示されます。

とても便利ですが、

「これ、裏で何が起きているのか?」

ここを理解すると、C# の理解が一段深くなります。


今日学ぶこと

  • デザイン操作の正体 … Visual Studio が C# コードを自動生成していること
  • フィールド宣言 … private Label label1; が「部品を使う」という意味であること
  • InitializeComponent … new とプロパティと Controls.Add で実体を作ること
  • 表示の理由 … Controls.Add があるからフォーム上に載り、初めて見えること

デザイン操作の正体は「コード自動生成」

Visual Studio は、デザイン画面での操作を すべて C# コードとして自動生成しています。

見えていないだけで、裏ではコードが書かれています。


フィールドとしての宣言

private System.Windows.Forms.Label label1;

これは 「Label という部品をこのフォームで使います」 という宣言です。ここだけでは、まだ画面に何も出ません。


InitializeComponent で実体を作る

デザイナが生成するコード(Form1.Designer.cs の InitializeComponent 内)には、だいたい次のような処理が並びます。

this.label1 = new System.Windows.Forms.Label();
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(100, 100);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(38, 15);
this.label1.TabIndex = 0;
this.label1.Text = "label1";

this.Controls.Add(this.label1);

本質はこの3行

重要な処理は、実は次の流れに集約できます。

this.label1 = new Label();          // 作る
this.label1.Text = "label1";        // 設定する
this.Controls.Add(this.label1);     // 画面(フォーム)に追加する

AutoSize や TabIndex などは、デザイナやキーボード操作のための 付帯的な設定です。「表示される」ための最小の心臓部は、上の3つだと考えてよいです。


なぜ画面に表示されるのか

ポイントは次の1行です。

this.Controls.Add(this.label1);

これがあることで、

  • 作っただけの Label が
  • Form の子コントロールとして載り
  • 初めて 画面に描画される対象になります

new しただけでは、まだフォームの「載せる場所」に登録されていない、というイメージです。


よくあるつまずき

多くの人がここで止まります。

  • new している場所が分からない
  • 勝手に表示される理由が分からない
  • Controls.Add の意味が分からない

これは デザイナがコードを隠しているためです。Form1.Designer.cs を開くと、見え方が変わります。


実験して理解する

デザインを使わず、コードだけで書いてみましょう。フォームに Button を1つ置き、Click で次を実行します。

private void button1_Click(object sender, EventArgs e)
{
    Label lbl = new Label();
    lbl.Text = "こんにちは";
    lbl.Location = new System.Drawing.Point(50, 50);

    this.Controls.Add(lbl);
}

ボタンを押すたびにラベルが増える場合は、Controls.Add が そのたびに新しい Label を登録しているからです(同じ変数でも、毎回 new していれば別インスタンスです)。


このコードの意味(3つの流れ)

  1. Label を作るnew
  2. 内容や位置を決める(プロパティ)
  3. Form に追加するControls.Add

まとめ

WinForms のデザイン操作は、

ドラッグ&ドロップ = コード自動生成

です。

そして本質は次の3点です。

  • new で作る
  • プロパティを設定する
  • Controls に追加する

最後に

デザイン画面は便利ですが、何がコードとして動いているかを理解することが重要です。

これが分かると、Button・TextBox・PictureBox も 同じ考え方で理解できるようになります。


次の記事(予定)

  • Controls コレクションの仕組み(親子関係・列挙のイメージ)
  • イベント(Click など) とデザイナが生成する購読コード

目次は シリーズ固定ページ を参照してください。

訪問数 2 回, 今日の訪問数 2回

広告