ASP.NET Click事件句柄 - 如何在VB.NET中传递参数?

时间:2009-03-20 16:24:46

标签: .net asp.net events

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

我知道我必须做这样的事情:

AddHandler bGetSessionMembers.Click, AddressOf bGetSessionMembers_click

但是我想做这样的事情:

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

我认为你可以用C#

做到这一点
bGetSessionMembers.Click += bGetSessionMembers_click(Me, "My ID")

或者甚至在C#中,但是有了无数的代表。

有没有人有线索?

2 个答案:

答案 0 :(得分:2)

这是一种更好的方法。首先,按正常方式连接按钮:

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并将其转换为{{1就像我上面做的那样。

答案 1 :(得分:1)

安德鲁的答案非常棒,而且正是我所做的。我只想添加他编写的代码片段,因为该空行看起来像是在为一个片段而烦恼,显示如何使用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,

理查德。