2

解決できない問題があります。

n個のボタンの作成を処理するforループを使用して単純なフォームを作成し、サイクルの最後に.Clickイベントの特定のサブをボタンに設定しました

AddHandler btn.Click AddressOf mySub

今、私はクラス内で同じことをしたいと思っています。だから私は新しいクラスを作成し、次に簡単なメソッドを書きました

Public Sub buttonCreation(byval nButton as Integer)

メソッドはフォームのものとまったく同じことを行いますが、ボタンの .Click イベントのハンドラーを追加する必要があるときにスタックしました。

次に、デリゲートを作成しようとしましたが、使用できませんでした。AddressOf は、括弧なしでメソッドの名前のみを受け入れます。

編集

フォーム内にデリゲートを作成しました

 Dim delegate As EventHandler
 delegate  = New EventHandler(AddressOf mySub)

次に、クラスメソッドを呼び出し、デリゲートをパラメーターとして渡します

ClassA.buttonCreation(10, delegate) 

ここで立ち往生しているサイクルの最後に、イベント時に呼び出すサブ ボタンを割り当てる必要があります。クリックが発生します。これを実行しようとしましたが、明らかに機能しません

AddHandler btn.Click AddressOf delegate

手伝って頂けますか ?よろしくお願いします

PS:明らかに、私が指摘したいメソッドはクラス内ではなく、フォーム内にあります。

4

1 に答える 1

5

デリゲート アプローチを使用できます。キーワードを取り除きAddressOf、コンマの直後にデリゲートを配置するだけです。

簡単な例を次に示します。

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ClassA.buttonCreation(5, FlowLayoutPanel1, New EventHandler(AddressOf mySub))
    End Sub

    Private Sub mySub(sender As System.Object, e As System.EventArgs)
        Dim btn As Button = DirectCast(sender, Button)
        MessageBox.Show(btn.Text)
    End Sub

End Class

Public Class ClassA

    Public Shared Sub buttonCreation(ByVal n As Integer, ByVal AddTo As Control, ByVal dlg As EventHandler)
        For i As Integer = 1 To n
            Dim btn As New Button
            btn.Text = "Btn" & i
            AddHandler btn.Click, dlg
            AddTo.Controls.Add(btn)
        Next
    End Sub

End Class
于 2013-07-08T17:31:08.880 に答える