基本コントロールによるGUI作成 (4/5)
作成:2011-09-05 08:53
更新:2011-09-05 08:53
更新:2011-09-05 08:53
■コントロールのインスタンスはどこにある?
ところで、作成したソースコードを見て、ちょっと不思議に思った人はいないでしょうか。先のサンプルでは、textBox1.TextというようにしてtextBox1のテキストを取り出していました。――この「textBox1」って、何でしょう? なんでこんなものが使えるようになっているのでしょうか?
その秘密は、前回、プロジェクトのソースコードファイルを紹介したのを思い出してもらえれば解けるでしょう。前回、MainPageクラスは、実は2つの部分にわかれているのだ、ということを説明しました。「MainPage.g.i.cs」というソースコードファイルにMainPageのもう1つのクラス(パーシャルクラス)が用意されていたのでした。
下のリスト欄に、今回修正した状態でのMainPage.g.i.csソースコードを掲載しておきます。追加したコントロール関係のフィールドが増えていることがわかるでしょう。この部分ですね。
そして、これらのフィールドにインスタンスを設定する処理がInitializeComponentメソッドに追記されています。この部分です。その秘密は、前回、プロジェクトのソースコードファイルを紹介したのを思い出してもらえれば解けるでしょう。前回、MainPageクラスは、実は2つの部分にわかれているのだ、ということを説明しました。「MainPage.g.i.cs」というソースコードファイルにMainPageのもう1つのクラス(パーシャルクラス)が用意されていたのでした。
下のリスト欄に、今回修正した状態でのMainPage.g.i.csソースコードを掲載しておきます。追加したコントロール関係のフィールドが増えていることがわかるでしょう。この部分ですね。
internal System.Windows.Controls.TextBox textBox1;
internal System.Windows.Controls.Button button1;
internal System.Windows.Controls.TextBlock textBlock1;
this.textBox1 = ((System.Windows.Controls.TextBox)
(this.FindName("textBox1")));
this.button1 = ((System.Windows.Controls.Button)
(this.FindName("button1")));
this.textBlock1 = ((System.Windows.Controls.TextBlock)
(this.FindName("textBlock1")));
これらコントロールを扱うオブジェクトは、System.Windows.Controls.TextBoxというように、System.Windows.Controlsパッケージにクラスが用意されています。MainPage.xamlに配置した部品は、ここにあるコントロールクラスのインスタンスとして組み込まれており、それをFindNameで取り出して操作しているというわけです。
こうした、表からは見えないところでの仕掛けにより、ごく簡単にコントロールのオブジェクトをコード内から利用できるようになっていたのですね。