【问题标题】:Delegate and AddressOf代表和地址
【发布时间】:2013-07-08 17:05:02
【问题描述】:

我有一个无法解决的问题。

我创建了一个带有 for 循环的简单表单,用于处理 n 个按钮的创建,在循环结束时,我为按钮设置了 .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:显然我要指向的方法不在类内部,而是在表单内部。

【问题讨论】:

  • 你写了什么代码?你得到了什么错误?
  • 我创建了一个委托,将表单中的“MySub”方法作为参数传递给我的类中的“buttonCreation”方法。
  • @Yve 已更新,感谢您的耐心等待
  • @Yve 我认为这就够了,不幸的是我使用了。从仅仅 2 年开始,我仍然有很多事情我无法完全处理。再次感谢您。
  • @Yve 以某种方式链接会帮助我,他们总是这样做 =)。我还没有解决,但我正在考虑可能的解决方案

标签: vb.net delegates


【解决方案1】:

您可以使用委托方式,只需去掉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

【讨论】:

  • 几分钟前我尝试过类似的操作,但我认为我做错了什么。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2016-07-20
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多