2005年12月21日

コントロール配列

VB.NETにはコントロール配列は存在しない、それに類似した処理をどう行うかを記す。

例:電卓の数字0〜9までのボタンをクリックした時

VB6
'btn(0)〜btn(9)までの10個のコマンドボタンの配列を作成
Private Sub btn_Click(Index As Integer)
MsgBox "ボタン[" & CStr(Index) & "]が押されました"
End Sub
 
VB.NET
Private Sub btn_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btn1.Click, btn2.Click, btn3.Click, _
btn4.Click, btn5.Click, btn6.Click, _
btn7.Click, btn8.Click, btn9.Click, _
btn0.Click

Dim btn As Button
Dim No As String
btn = CType(sender, Button) 'イベント発生元のボタン情報を取得
Select Case btn.Name 'ボタン名を参照
Case "btn1" : No = "1"
Case "btn2" : No = "2"
Case "btn3" : No = "3"
Case "btn4" : No = "4"
Case "btn5" : No = "5"
Case "btn6" : No = "6"
Case "btn7" : No = "7"
Case "btn8" : No = "8"
Case "btn9" : No = "9"
Case "btn0" : No = "0"
End Select
'--- 上記の場合は以下のように1行にできる -------
'No = Microsoft.VisualBasic.Right(btn.Name, 1)
'---------------------------------------------
MsgBox("ボタン[" & No & "]が押されました")
End Sub


posted by なっちゃん at 10:22| 静岡 ☁| Comment(2) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
あれっ コントロール配列はつくれますよ?

(フォームに、Label1からLabel5までがあるとする)

(グローバル)
'ラベルのコントロール配列フィールド作成
Private Labels() As System.Windows.Forms.Label

Private Sub Form1_Load (Byval sender ....(中略)...) Handles MyBase.Load
'コントロール配列を作成
Me.Labels = New System.Windows.Forms.Label(4) {}

'ボタンコントロールの配列にすでに作成されているインスタンスを代入
Me.Labels(0) = Me.Label1
Me.Labels(1) = Me.Label2
Me.Labels(2) = Me.Label3
Me.Labels(3) = Me.Label4
Me.Labels(4) = Me.Label5

End Sub

とやるとできます。
Posted by Knyacky at 2010年07月03日 16:40
ちょっと趣旨が違いますね。
配列を作れることは私も知っています。でもVB6のコントロール配列の良さであった、イベントに配列番号を引数に使って処理することができないことを取り上げて言っているのです。
仰るような配列を使ってもイベントは私が書いたような方法でなければ出来ないはずですが。
もしVB6と同じイベントの書き方が出来ればぜひ教えてください。

なお、初代VB.NETの頃からVB6のプロジェクトを開くとコントロール配列は、自動的にControlArrayクラスに変換してくれます。しかしこれは互換モード(Microsoft.VisualBasic.Compatibility.VB6)によるので.NET本来のコントロールとは異なるものです。
Posted by なっちゃん at 2010年07月03日 20:59
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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

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