DOBON.NET DOBON.NETプログラミング掲示板過去ログ

遅延バインディングとstrict ONの問題

環境/言語:[VB2003]
分類:[.NET]

MSのサンプルプログラム”Visual Basic .NET におけるコントロール配列の変更点”でstrictをONにした場合、ア部にて遅延バイディングにより、エラーが出ます。調べた結果、引数がObect変数であることがまずいようですが、具体的にどのように変更したら良いのか解りません。どなたか、お教え願えませんか?

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click
Select Case sender.TabIndex  ← ア
Case 0
MsgBox("Button 1")
Case 1
MsgBox("Button 2")
Case 2
MsgBox("CheckBox 1")
End Select
End Sub
こんな感じでしょうか?

        Dim TabIndex As Integer
        If TypeOf sender Is Button Then
            TabIndex = DirectCast(sender, Button).TabIndex
        ElseIf TypeOf sender Is CheckBox Then
            TabIndex = DirectCast(sender, CheckBox).TabIndex
        End If
        Select Case TabIndex
            Case 0
                MsgBox("Button 1")
            Case 1
                MsgBox("Button 2")
            Case 2
                MsgBox("CheckBox 1")
        End Select

Strict Onなので適切な型にキャストしないとだめだと思います。
何も考えずにするならtypeofでインスタンス:eの元のクラスをチェックした後、
適切にctypeで型変換でいいのではないかと。
■No17357に返信(ガッさんの記事)
> 何も考えずにするならtypeofで

そうですね、TypeOf ~ Is ~ ですね。

> インスタンス:eの元のクラスをチェックした後、

sender 引数の箱の中身の型 (クラス) ですよね。

> 適切にctypeで型変換でいいのではないかと。

そうですね、CType および DirectCast でキャストすれば良いです。

そもそも、「遅延バインディング」 とは何か?
さえ知っていれば、何をどうすれば良いのかわかりそうですが...

アクセスしたいメンバの存在が保証された型を使用すれば良いわけです。

DOBON.NET | プログラミング道 | プログラミング掲示板