AddressOf が実際に何をするのか、実際に何をするのかについて誤解があると思います。
AddressOf は単に MEMORY ADDRESS を と呼ばれる関数またはメソッドに格納するだけです。.NET デリゲートについて読めば概念は理解できますが、重要なのは、デリゲートがメソッドの MEMORY ADDRESSES を格納する .NET の型であることを理解することです。それだけ。デリゲート変数にはメソッドが格納されますか? いいえ、メソッドではなく、署名がデリゲートの宣言と一致するメソッドのみです。
そして、イベントの概念について学ぶ必要があります。これは、イベントがどのデリゲートがそれを処理するかを知る必要があるためです (誰が eventHandler で、これはデリゲートです)。
今、あなたは引数を AddressOf に渡すことができないと言いました。これはあなたの誤解です。メソッドまたは関数にメモリ アドレスを直接渡すため、引数を AddressOf に渡しません。そのメソッドまたは関数には、その宣言に従って既に引数が含まれています。
したがって、次のようなものを見つけた場合:
AddHandler button.click, AddressOf mysub
あなたがコンパイラに伝えていることは次のとおりです。記憶の中に生きている..」
mysub は、ボタンがクリックされたときに実行されるメソッドです。
どの引数を渡すか、または引数を渡す方法を考えていました。これらの引数を渡すのはボタン クリック イベントであるため、引数を渡さないでください。メソッド mysub がボタンから受け取るパラメーターを処理するだけです。
また、mysub がボタンから受け取る必要のあるパラメーターをどのように知るのでしょうか? それらはデリゲート定義で定義されたものでなければならないからです。デリゲート変数はどのメソッドにもメモリ アドレスを格納せず、ボタン イベントクリックに関連付けられたデリゲートの定義と署名が一致するメソッドにのみ格納すると述べたことを思い出してください。
したがって、Button イベントの定義に移動すると、デリゲート型が使用されていることがわかります。そのデリゲートのシグネチャを見ると、このデリゲート ストアが持つメソッドの引数の型が正確にわかります。
ただし、グッド プラクティスでは、Event は、署名 (格納できるメソッドの署名) に 2 つの引数が含まれる Delegates にアタッチする必要があるとされています。
具体的な答えとして。ボタンのクリックイベントを処理するメソッドのメモリアドレスを渡す代替手段が必要な場合は、単にメモリアドレスを渡さず、次のような関数の内容を持ちます。
AddHandler button.click, Sub (ByVal sender As Object, ByVal e As System.EventArgs, ByVal str As String)
'do something here
End Sub
この場合、コンパイラに次のように伝えます。最初の引数を送信者変数に入れ、2 番目の引数を EventArgs 変数に入れます」