4

dropdownListボックスを動的に作成しようとAddHandlersしています。それらに追加して、アイテムが選択されたときにイベントが発生するようにしたいのですが、別の変数を渡す必要もあり、何を入力すればよいかわかりませんのパラメータsystem.EventArgs。以下のコードを見て、私が抱えている問題を確認してください。

AddHandler inputDrop.SelectedIndexChanged, AddressOf selOption(inputDrop, ???, var1)

Protected Sub selOption(ByVal sender As Object, ByVal e As System.EventArgs, ByVal tableCount As String)

End Sub

ここに何を (???) 入れますか。

エラー:

はイベントであり、直接呼び出すことはできません。「RaiseEvent」ステートメントを使用してイベントを発生させます。

4

3 に答える 3

6

さらに、Mike Cが既に説明したように、イベント ハンドラーのシグネチャがイベントと一致しない場合は、いつでもイベント ハンドラーを別のメソッド (匿名メソッドなど) でラップできます。

Protected Sub selOption(ender As Object, e As System.EventArgs, somestring As String)

End Sub

...

For i = 1 To 10
    Dim cbox = new ComboBox()
    Dim number = i ' local copy to prevent capturing of i '
    AddHandler cbox.SelectedIndexChanged, Sub(s, e) selOption(s, e, "Hi! I am Number " & number)
Next

ComboBoxここで、最後の変更のインデックスが渡されると、にsomestring渡されるパラメーターは になりますが、最初のものなどになります。selOptionHi! I am Number 10Hi! I am Number 1ComboBox

于 2013-09-10T14:31:13.270 に答える
5

イベント ハンドラーを登録するときは、その時点で引数を指定しません。基本的には、イベントが発生したときにイベントを処理するデリゲートへの参照を設定しているだけです。

AddHandler inputDrop.SelectedIndexChanged, AddressOf selOption

最も重要なことは、イベント ハンドラーのメソッド シグネチャが、イベントによって定義されたメソッド シグネチャと正確に一致することです。追加のtableCountパラメーターが指定されているため、メソッドが機能するかどうかはわかりません。メソッドのシグネチャを次のように変更する必要があります。

Protected Sub selOption(ByVal sender As Object, ByVal e As System.EventArgs)

私はそれSelectedIndexChangedをWinformsの定義に基づいています。このイベントは、ASP.net や WPF などの別のテクノロジでは別の方法で定義できます。または、これが何らかのカスタム クラスである場合は、まったく異なるシグネチャである可能性があります。ただし、通常、ほとんどのイベント ハンドラーは、sender(イベントを発生させるインスタンス) といくつかのイベント引数の類似した構造を持っています。

次に、inputDropイベントが発生すると(選択されたアイテムが変更されたとき)、コードが自動的に呼び出されます。このメソッドに渡される引数は から直接渡されるinputDropため、指定する必要はありません。

また、AddHandlerステートメントはメソッドまたはコード ブロック内に存在する必要があり、クラス定義だけに存在することはできません。これは、他のコードと同様に実行する必要があるステートメントであり、宣言ではありません。

于 2013-09-10T13:41:49.320 に答える