【学習】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つの流れ)
- Label を作る(
new) - 内容や位置を決める(プロパティ)
- Form に追加する(
Controls.Add)
まとめ
WinForms のデザイン操作は、
ドラッグ&ドロップ = コード自動生成
です。
そして本質は次の3点です。
newで作る- プロパティを設定する
Controlsに追加する
最後に
デザイン画面は便利ですが、何がコードとして動いているかを理解することが重要です。
これが分かると、Button・TextBox・PictureBox も 同じ考え方で理解できるようになります。
次の記事(予定)
- Controls コレクションの仕組み(親子関係・列挙のイメージ)
- イベント(Click など) とデザイナが生成する購読コード
目次は シリーズ固定ページ を参照してください。



ディスカッション
コメント一覧
まだ、コメントがありません