2006年05月18日

VB.NETのコントロールの一括処理(コントロール配列−その3)

以前、VB6のようにコントロール配列が使えないため、沢山あるテキストボックスにデータを代入するのに便利な方法を取り上げたが、これはWebアプリ(ASP.NET)でしか使えない方法だった。
「コントロール配列−その2」

Windowアプリ(VB.NET)ではどうやって実現するか調べてみた。
そして、@ITの「Windowsフォーム上のすべてのコントロールを列挙するには?」を使うことで実現できることがわかった。

サンプルとして取り上げたのは、起動時に全てのTextBoxのTextプロパティを初期化し、Labelコントロールの中でもBorderStyleがFixed3Dのものだけを初期化するというものである。

まず、@ITのサンプルにある「すべてのコントロールを再帰的に取得するメソッド」を汎用モジュールとする。これはForm上の全てコントロールを一つの配列に取り込むものである。

Public Function GetAllControls(ByVal top As Control) As Control()
Dim buf As ArrayList = New ArrayList
For Each c As Control In top.Controls
buf.Add(c)
buf.AddRange(GetAllControls(c))
Next
Return CType(buf.ToArray(GetType(Control)), Control())
End Function

次にTextプロパティの初期化ルーチン[ControlInit]を次のようにする。
ここでは、取得した全てのコントロールから目的のTextBoxとLabelをTypeOf ... Is 式を使って判定している。もし、コントロール名を知りたければ、nameプロパティを使うとTextBoxやLabelの個別名がわかる。

Private Sub ControlInit()
Dim AllCtrl As Control() = GetAllControls(Me)
For Each c As Control In AllCtrl
If TypeOf c Is TextBox Then
'TextBoxだったら
c.Text = "" 'TextBoxの初期化
ElseIf TypeOf c Is Label Then
'Labelだったら
Dim lb As Label
'(注) c のままではBorderStyleにアクセスできない
lb = CType(c, Label)

If lb.BorderStyle = BorderStyle.Fixed3D Then
'BordeStyleがFixed3Dだったら
lb.Text = "" 'Labelの初期化
End If
End If
Next
End Sub

後はこれをForm_Loadイベントで実行すればよい。


posted by なっちゃん at 10:49| 静岡 ☔| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。