2009-03-20 5 views
0

J'utilise le contrôle Ajax accordéon. Pour chaque volet d'Accordion, j'ai du texte et un bouton créé dynamiquement. Lorsque l'utilisateur déclenche l'événement click, je veux savoir quel bouton dans quel volet a été déclenché. Je veux donc gérer l'événement click du bouton de telle sorte que je puisse envoyer l'ID (probablement par des arguments d'événement) au gestionnaire d'événements pour que le gestionnaire sache quoi faire en fonction du bouton qui a été pressé.ASP.NET Click Event Handle - Comment passer un argument dans VB.NET?

Je sais que je dois faire quelque chose comme ceci:

AddHandler bGetSessionMembers.Click, AddressOf bGetSessionMembers_click 

mais je whanted de faire quelque chose comme ceci:

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

Je pense que vous pouvez le faire en C#

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

ou même en C# mais avec des délégués anonymes.

Est-ce que quelqu'un a une idée?

Répondre

2

Voici une meilleure façon de procéder. Tout d'abord, câbler vos boutons comme d'habitude:

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

Ensuite, créez une méthode Click comme ceci:

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 

intérieur que si la déclaration que vous avez maintenant un Button - vous pouvez saisir son ID ou quoi que ce soit d'autre au sujet c'est ce que tu aimerais.

Modifier en réponse à un commentaire:

Je pense que vous pouvez avoir de nombreux malentendus comment les événements sont câblés en .NET. Lorsque vous faites ceci:

AddHandler Button2.Click, AddressOf Click 

Vous n'êtes pas appeler la méthode Click, vous passez un délégué à une méthode généré par le compilateur pour l'événement Button.Click qui ajoute votre délégué à une liste d'appel de délégué. Lorsque le Button déclenche son événement Click, votre délégué est appelé par le Button. Puisque vous ne serez pas le seul à invoquer la méthode via le délégué, vous ne pouvez pas changer ce qui est passé. Votre meilleure option est d'utiliser le Object qui vous est passé et de le lancer comme Button comme je l'ai fait ci-dessus.

1

La réponse d'Andrew est superbe, et c'est exactement ce que je ferais. Je voudrais juste ajouter à l'extrait de code qu'il a écrit, parce que cette ligne vide ressemble à un extrait montrant comment utiliser les propriétés CommandArgument et CommandName de System.Web.UI.Button:

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 

Andy - espérons que vous ne me dérange pas de jeter un peu plus de choses ici :)

HTH,

Richard.

+0

Cela ne vous dérange pas du tout! Bien joué, belle addition. –

Questions connexes