首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态使用AddressOf

动态使用AddressOf
EN

Stack Overflow用户
提问于 2014-10-25 22:50:59
回答 3查看 977关注 0票数 1

我使用以下代码在运行时添加要形成的按钮:

代码语言:javascript
复制
Private Sub AddNewButton(ByVal btnName As String, ByVal btnText As String)
    Dim myButtons As New VIBlend.WinForms.Controls.vButton

    With myButtons
        .Size = New Size(200, 60)
        .Visible = True
        .Location = New Point(55, 33)
        .Text = btnText
        .Name = btnName
        .Font = New Font("Times New Roman", 12, FontStyle.Bold, GraphicsUnit.Point)
    End With

    AddHandler myButtons.Click, AddressOf btnName & "_Click"

    btnsPanel.Controls.Add(myButtons)

End Sub

代码工作正常,但是Vb.net不允许我使用变量AddressOf btnName & "_Click"为AddressOf分配一个子过程,AddressOf operand must be the name of method说,问题是我不知道要创建哪个按钮以及它要调用哪个过程,我想使用变量为AddressOf过程赋值,这可能吗?或者我还有其他选择吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-25 23:02:21

您可以(而且应该)对所有按钮使用相同的事件处理程序。

代码语言:javascript
复制
AddHandler myButtons.Click, AddressOf btn_Click

您可以通过这种方式在处理程序中获取名称:

代码语言:javascript
复制
Private Sub btn_Click(sender As Object, e As EventArgs)
    Dim button = DirectCast(sender, Button)
    Dim name As String = button.Name ' you can also use the Tag property
End Sub
票数 6
EN

Stack Overflow用户

发布于 2014-10-26 11:56:14

您也可以使用闭锁,我一直认为它非常灵活和可读性强。

代码语言:javascript
复制
Imports VIBlend.WinForms.Controls

Private Sub AddNewButton(ByVal btnName As String, ByVal btnText As String)
    Dim myButton = New vButton() With
                    {
                        .Size = New Size(200, 60),
                        .Visible = True,
                        .Location = New Point(55, 33),
                        .Text = btnText,
                        .Name = btnName,
                        .Font = New Font("Times New Roman", 
                                 12, FontStyle.Bold, GraphicsUnit.Point)
                    }

    AddHandler myButton.Click, Sub(s, e)
                                   'Do something with Name
                                   MessageBox.Show(myButton.Name)
                                   'Or do something in a instance method
                                   Me.HandleButtonClick(myButton)
                               End Sub

    btnsPanel.Controls.Add(myButton)
End Sub

Private Sub HandleButtonClick(myButton As vButton)
    ' DO something her with myButton
End Sub
票数 3
EN

Stack Overflow用户

发布于 2017-12-08 10:57:05

这个问题虽然老了,却缺乏一个直接和完整的答案。这里是一个(动态)按钮的完全动态处理程序:

代码语言:javascript
复制
    Dim SubName As String = dr("SubToRun").ToString
    Dim Pareameter1 As String = dr("Pareameter1").ToString
    Dim Pareameter2 As String = dr("Pareameter2").ToString
    Dim Pareameter3 As Int32 = ValPareameter3
    AddHandler btn.Click, Sub(s, e)
                              CallByName(Me, SubName, CallType.Method, Pareameter1, Pareameter2, Pareameter1)
                          End Sub
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26568061

复制
相关文章

相似问题

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