首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delegate和AddressOf

Delegate和AddressOf
EN

Stack Overflow用户
提问于 2013-07-09 01:05:02
回答 1查看 4.1K关注 0票数 2

我有一个我不能解决的问题。

我使用for循环创建了一个简单的表单,该循环处理n个按钮的创建,在循环结束时,我为该按钮设置了.Click事件的特定sub

代码语言:javascript
复制
AddHandler btn.Click AddressOf mySub

现在我想在一个类中做同样的事情。所以我创建了一个新类,然后写了一个简单的方法

代码语言:javascript
复制
Public Sub buttonCreation(byval nButton as Integer)

该方法与表单中的方法做的事情完全相同,但是当我必须为按钮的.Click事件添加处理程序时,我就卡住了。

然后我试图创建一个委托,但我不能使用它,AddressOf只接受没有括号的方法的名称。

编辑

我在表单中创建了委托

代码语言:javascript
复制
 Dim delegate As EventHandler
 delegate  = New EventHandler(AddressOf mySub)

然后,我调用我的类方法并将委托作为参数传递

代码语言:javascript
复制
ClassA.buttonCreation(10, delegate) 

我在这里卡住了,在循环的末尾,应该分配到要调用的子按钮时的事件。单击被解雇,我试图这样做,但显然不起作用

代码语言:javascript
复制
AddHandler btn.Click AddressOf delegate

你能帮我吗?诚挚的问候

PS:很明显,我想要指向的方法不在类中,但它在表单中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 01:31:09

您可以使用委托方法,只需去掉AddressOf关键字,将委托放在逗号后面即可。

下面是一个简单的例子:

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17532207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档