【问题标题】:ASP.NET Click Event Handle - How to pass an argument in VB.NET?ASP.NET 单击事件句柄 - 如何在 VB.NET 中传递参数?
【发布时间】:2009-03-20 16:24:45
【问题描述】:

我正在使用手风琴 Ajax 控件。对于每个 Accordion 窗格,我都有动态创建的文本和按钮。当用户触发单击事件时,我想知道触发了哪个窗格中的哪个按钮。因此,我想以一种可以将 ID(可能通过事件参数)发送到事件处理程序的方式来处理按钮的单击事件,以便处理程序根据按下的按钮知道该做什么。

我知道我必须这样做:

AddHandler bGetSessionMembers.Click, AddressOf bGetSessionMembers_click

但我想做这样的事情:

AddHandler bGetSessionMembers.Click, AddressOf bGetSessionMembers_click(Me, "My ID")

我认为你可以在 C# 中做到这一点

bGetSessionMembers.Click += bGetSessionMembers_click(Me, "My ID")

甚至在 C# 中使用匿名委托。

有人知道吗?

【问题讨论】:

    标签: .net asp.net events


    【解决方案1】:

    这里有一个更好的方法来做到这一点。首先,像往常一样连接你的按钮:

    AddHandler Button1.Click, AddressOf Click
    AddHandler Button2.Click, AddressOf Click
    

    然后像这样创建一个Click 方法:

    Sub click(ByVal o As Object, ByVal e As EventArgs)
        Dim button As Button = TryCast(o, Button)    
        If button IsNot Nothing Then
    
        End If
    End Sub
    

    在 if 语句中,您现在有一个 Button - 您可以获取它的 ID 或您想要的任何其他内容。

    根据评论进行编辑:

    我认为您可能误解了 .NET 中事件的连接方式。当你这样做时:

    AddHandler Button2.Click, AddressOf Click
    

    您没有调用方法Click,而是将委托传递给编译器为Button.Click 事件生成的方法,该方法将您的委托添加到委托调用列表中。当Button 引发其Click 事件时,Button 会调用您的委托。

    由于您不是通过委托调用该方法的人,因此您无法更改传入的内容。您最好的选择是使用传递给您的Object 并将其转换为Button,就像我一样上面做了。

    【讨论】:

      【解决方案2】:

      Andrew 的回答非常棒,这正是我会做的。我只想添加到他编写的代码 sn-p 中,因为那个空白行看起来像是在呼唤一个 sn-p 来展示如何使用 System.Web.UI.Button 的 CommandArgument 和 CommandName 属性:

      Sub click(ByVal o As Object, ByVal e As EventArgs)
          Dim button As Button = TryCast(o, Button)    
          If button IsNot Nothing Then
              Select Case button.CommandName
                Case "Command1"
                  'Your cool feature here :)
                Case "Command2"
                  'You could check button.CommandArgument to get additional data
                Case Else
                  'Runs if button.CommandName isn't handled by your code
              End Select
          End If
      End Sub
      

      安迪 - 希望你不介意我在这里扔更多东西 :)

      HTH,

      理查德。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-13
        • 2013-06-04
        • 2016-04-20
        • 1970-01-01
        • 2019-09-14
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        相关资源
        最近更新 更多