遅延バインディングの回避方法 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 N88-BASIC  (社会人) 投稿日時 2019/2/6 11:30:18
魔界の仮面弁士 さま、ご連絡ありがとうございます。

>MouseClick を使っているのは、意図的なものでしょうか。

意図的に使用しております。対象チェックボックスの最初のクリックでチェックボックスを選択した状態とし、そのクリックボックス全体の背景色も変更して対象であることを表すだけで、最初のクリックでチェック状態の変更を抑制するためです(最初のクリックでチェック状態が変わらないようにするため)。選択したチェックボックスをもう一度クリックすることでチェック状態を変えるためです。処理目的は時刻表のようなもので目的の時間が近づくとチェックボックスの背景色を変更して注意を喚起します。また、チェックボックスは注意喚起でビープ音を鳴らすかどうかを制御するためです。

>Private item() As CheckBox

実際は item(n,m) as CheckBox とした2次元配列で処理しており、私の知識では2次元配列への対処は実現できておりません。TAGに数値をわりあてて使った方法なので一次元配列に変更して対応できると思いますが、現状では他の部分への影響を考えて SHU さんの方法で実現させていただきます。ただ、一次元配列で実現可能な処理を行うアプリも作成しておりますので導入させていただきたいと思います。

2次元配列にしたのは時刻表のイメージから考えると、上り、下りに分けたためです。

今後ともよろしくお願いいたします。



投稿者 N88-BASIC  (社会人) 投稿日時 2019/2/6 10:59:27
 shu さま、ご回答ありがとうございます。

ご案内いただいた方法で無事解決いたしました。

今後ともよろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/2/6 09:30:11
> AddHandler item(i).MouseClick, AddressOf Item_Click

MouseClick を使っているのは、意図的なものでしょうか。
CheckedChanged を使わないと、キーボードからの選択時に問題がありませんか?
(矢印キー等でカーソル移動して、Space キーで選択された場合など)


> item(i) = new checkbox <--- 意外な感じですが checkbox を使っています

上記の配列が
Private item() As CheckBox
で管理されているのなら、Tag プロパティに頼らずとも
Dim idx As Integer = Array.IndexOf(item, sender)
'Dim chk As CheckBox = item(idx) 
'Dim chk As CheckBox = DirectCast(sender, CheckBox) 
で処理できそうです。
投稿者 shu  (社会人) 投稿日時 2019/2/5 17:36:38
sender.tag
=> DirectCast(sender, CheckBox).tag

など

投稿者 N88-BASIC  (社会人) 投稿日時 2019/2/5 12:05:09
Windows10 + Visual Studio 2017 にてプログラムを開発しております。
複数のコントロールを同じイベントで処理をしたいと考え、各コントロールの判別をTAGプロパティで行おうとしておりますが、Option Strict On 状態では”遅延バインディングを使用できません”となり、現状、Option Strict Off にて運用しています( On の状態で遅延バインディング以外のエラーをチェック後)

現在の処理の概要は

   item(i) = new checkbox <--- 意外な感じですが checkbox を使っています
       item(i).tag = i
       Me.Controls.Add(item(i))
       AddHandler item(i).MouseClick, AddressOf Item_Click

Private Sub Item_Click(sender as Object , e as EventArgs)

     Select Cint(sender.tag)           <--- ここで遅延バインディングのエラーとなります。
         case 0
         case 1
     End Select

End Sub

Option Strict On 条件下で遅延バインディングを回避する方法もしくは、イベント発生元を判断する方法をご教授いただければ幸いです。