質問: 0 To 9 AddHandler obj年代(i).KeyPress, AddressOf test_CheckedChanged Next End Sub Public Sub test_CheckedChanged(ByVal Object sender, ByVal EventArgs e) ... End Sub Public Sub obj名前_LostFocus(ByVal Object sender, ByVal EventArgs e) Handles obj名前.LostFocus( ... End Sub --- 私の認識でコントロールをクラス変数で保持しておくのは以下のメリット(場合)だと考えていました。 ・VB6時代にコントロール配列があって、同グループのチェックボックスをループ処理などで纏めて処理する為の管理 ・同一イベントハンドラーを複数コントロールに紐づけて処理させる為にコントロールをオブジェクト化 ・イベントハンドラーの動的な紐づけ そこで質問させていただきたいのですが、 ▼1.全ての入力コントロールをクラス宣言してイベント発生させるのに意味が見出せませんが、 少なくても「共通イベントを持たない かつ チェックボックスやラジオボタン以外」も 積極的にクラス変数化するのは、どのようなメリットがあるのでしょうか。 (イベントの追加・解除が必要な画面でならばHandlesのよるイベントハンドラーは解決できない場合もあり!?) ▼2.C#でもコントロールのオブジェクト変数化は普通に行われている技術でしょうか。 ▼3..Netの新画面にコントロール配列に違和感を感じるのは私だけでしょうか。 色々な現場、実装方法を知りたいので様々な意見頂戴できると幸いです。
回答: こんにちは。 > > ▼1.全ての入力コントロールをクラス宣言してイベント発生させるのに意味が見出せませんが、 > > 少なくても共通イベントを持たない かつ チェックボックスやラジオボタン以外も積極的に > > クラス変数化するのは、どのようなメリットがあるのでしょうか。 > > > そのコントロールをどこで作成しているかによります。デザイナー(xxx.Designer.vb)側で生成されているのであればそちらへ宣言済みです。今回のケースではコードビハインド?(xxx.vb)側でコントロールの生成を行っているのではないでしょうか。 VB.NETではイベントハンドラでHandles句を使用する場合はWithEvents宣言が必要です。 また上記の方法で生成されたコントロールをクラス内で自由にアクセスするためには宣言が必要です。 > > ▼2.C#でもコントロールのオブジェクト変数化は普通に行われている技術でしょうか。 > > > もはやC#とVB.NETは概念に大きな違いはありません。C#でも通常の考えです。 ただ、C#ではWithEventsもHandlesも存在しないので、obj年代のように自前でイベント購読させる必要はあります。 > > ▼3..Netの新画面にコントロール配列に違和感を感じるのは私だけでしょうか。 > > > 良し悪しはケースバイケースですが... 同一グループのCheckboxの数が可変であれば、アリかなと個人的に思います。