とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

.Designer.vb は何してますか?その3。

<Attention>
   その1に載せたコードを前提に書いています。
</Attention>

前回のエントリで Form1.Designer.vb は Form1 クラスの部分定義が書かれているファイルですよ~ってことは分かりました。

じゃ、中に書かれている内容を順番に見てみましょ♪(さくさくっとね。)

まずはこれ↓。

Inherits System.Windows.Forms.Form

MSDN:Inherits ステートメント(http://msdn2.microsoft.com/ja-jp/library/1yk8s7sk(VS.80).aspx)より。


現在のクラスまたはインターフェイスの属性、変数、プロパティ、プロシージャ、およびイベントを別のクラスまたは一連のインターフェイスから継承します。

端折ると、

あるクラスからその実装を継承するのだ!

ってことです(だめだな、これは。)。今回の Form1 クラスでいうと System.Windows.Forms.Form を継承しておいて、その機能を拡張して Form1 クラスをつくりますからよろしく!ってことです。1からウィンドウを表示したりとかの実装はもう出来上がってるやつがあるし、めんどくさいからそれ使うわ♪ってことですね。(たとえば、Form1 に何も書かなくても Text プロパティ や Show メソッド があります。これは Form クラスが実装してくれているからですね。)

ちなみにこのステートメント、C♯だとForm1.cs のほうに記述されています。ということは、

また隠し事か!orz

ちょっぴり寂しい。



・・・じゃ次はこれ↓

    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Text = "Form1"
    End Sub

InitializeComponent メソッドですね。指定されている属性は DebuggerStepThroughAttribute です。これについては

@IT : デバッグ時にメソッドをステップイン実行しないようにするには? (http://www.atmarkit.co.jp/fdotnet/dotnettips/362stepthrough/stepthrough.html)

を見ていただくとお分かりいただけるかと思います。つまり

ステップイン実行しててもこのメソッド(クラスも指定可)はステップインさせないぞ!

ってことです。ちなみにこの属性、C♯だとInitializeComponent メソッドには付いていません。ということは、

また隠し事か!orz

ま、ここステップインされても・・・まぁめんどくさいこともないこともないわけですが、ちょっぴり寂しい。

InitializeComponent メソッドの中身ですが、そのメソッド名からして 'コンポーネントを初期化し' ます。試しに Form1 にボタンをひとつ置いてみていただけると分かるかと思います。こんな感じ↓(新たにButton1 という変数も宣言されていますね。)

    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
    Me.Button1 = New System.Windows.Forms.Button
    Me.SuspendLayout()
    '
    'Button1
    '
    Me.Button1.Location = New System.Drawing.Point(17832)
    Me.Button1.Name = "Button1"
    Me.Button1.Size = New System.Drawing.Size(7523)
    Me.Button1.TabIndex = 0
    Me.Button1.Text = "Button1"
    Me.Button1.UseVisualStyleBackColor = True
    '
    'Form1
    '
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    Me.ClientSize = New System.Drawing.Size(292269)
    Me.Controls.Add(Me.Button1)
    Me.Name = "Form1"
    Me.Text = "Form1"
    Me.ResumeLayout(False)

  End Sub   Friend WithEvents Button1 As System.Windows.Forms.Button

ちなみに

Private components As System.ComponentModel.IContainer

この components という変数。ボタンを置く前のコードでは InitializeComponent メソッド内部で

components = New System.ComponentModel.Container()

ちゃんと初期化されていますが、ボタンを置くとなぜかそのコードが消えてます。あら不思議。(いやホントに不思議。)

というわけで、Form1 は Form クラスから継承されていてInitializeComponent メソッドはボタンやらは初期化していますよ~ってお話でした。



次回は、その components という変数 と Dispose メソッドについての内容になりそうです。

投稿日時 : 2007年3月16日 17:28

Feedback

# re: .Designer.vb は何してますか?その3。 2007/03/18 13:46 シャノン

> ちなみにこのステートメント、C♯だとForm1.cs のほうに記述されています。ということは、
> また隠し事か!orz

逆に言うと、Designerの方で、プログラマの知らぬ間にどんなクラスを継承しているかわかったもんじゃねぇですよw
まぁ、そんなことは事実上あり得ないけど、Partialは、すべてのクラス宣言を同じにしないといけないという制限が欲しかったかも。

#というか、所詮デザイナのためにある機能…
#違うと主張する方々もいるけど、俺にはそんなにいいもんとは思えない。

> ってことです。ちなみにこの属性、C♯だと
> InitializeComponent メソッドには付いていません。
> ということは、
> また隠し事か!orz

> ま、ここステップインされても・・・まぁめんどくさいこともないこともないわけですが、ちょっぴり寂しい。

C#の方にもつけてほしいなぁ、と思う。
プログラマが手でいじることを想定しないコードなわけだし(とはいえ、いじらざるを得ない状況はあるorz)、プログラマがその中身を知っている必要はないというか、知っているべきではないと思うし。

# re: .Designer.vb は何してますか?その3。 2007/03/19 8:55 とりこびと

シャノンさん コメントありがとうございます。


>逆に言うと、Designerの方で、プログラマの知らぬ間にどんなクラスを継承しているかわかったもんじゃねぇですよw

そうですね。 私自身もエントリの当初の
「Designerの動きを知っておいたほうがよさげ」
から
「Designerの動きを知っておくべき」
にシフトしてしまいました。

>C#の方にもつけてほしいなぁ、と思う。

あ、そうなんですか。DebuggerStepThroughAttribute はユーザーが判断してつけるほうがいいと思ったんですけど・・・。

>(とはいえ、いじらざるを得ない状況はあるorz)

これ、つらいですよね。orz

# .Designer.vb は何してますか?その4。 2007/03/19 12:02 とりこびと ぶろぐ。

.Designer.vb は何してますか?その4。

# When someone writes an article he/she retains the idea of a user in his/her brain that how a user can know it. Thus that's why this post is perfect. Thanks! 2024/04/09 7:04 When someone writes an article he/she retains the

When someone writes an article he/she retains the idea of a user in his/her
brain that how a user can know it. Thus that's why this
post is perfect. Thanks!

# What's Happening i'm new to this, I stumbled upon this I have found It positively helpful and it has aided me out loads. I hope to contribute & assist other users like its aided me. Good job. 2024/05/03 5:39 What's Happening i'm new to this, I stumbled upon

What's Happening i'm new to this, I stumbled upon this I have found It positively helpful and it has aided me out loads.
I hope to contribute & assist other users like its aided
me. Good job.

タイトル
名前
Url
コメント