2009-03-20 2 views
0

Я использую управление аккордеона Ajax. Для каждой панели аккордеона у меня есть текст и кнопка динамически созданная. Когда пользователь запускает событие клика, я хочу знать, какую кнопку в которой была запущена панель. Поэтому я хочу обработать событие нажатия кнопки таким образом, чтобы я мог отправить идентификатор (возможно, событиями) в обработчик событий, чтобы обработчик мог знать, что делать в соответствии с нажатой кнопкой.ASP.NET Click Event Handle - Как передать аргумент в VB.NET?

Я знаю, что я должен сделать что-то вроде этого:

AddHandler bGetSessionMembers.Click, AddressOf bGetSessionMembers_click 

но я whanted сделать что-то вроде этого:

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

Я думаю, что вы можете сделать это в C#

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

или даже в C#, но с анонимными делегатами.

У кого-нибудь есть ключ?

ответ

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 

Внутри что если оператор теперь есть Button - вы можете захватить его ID или что-нибудь еще о это то, что вы хотели бы.

Редактировать в ответ на комментарий:

Я думаю, вы можете быть недопонимание, как события распаяны в .NET. Когда вы сделаете это:

AddHandler Button2.Click, AddressOf Click 

Вы не вызывая метод Click, вы передаете делегат метод сгенерированного компилятора для Button.Click придающих вашего делегата в список делегатов вызова. Когда Button вызывает событие Click, ваш делегат вызывается Button.

Поскольку вы не можете вызвать метод через делегат, вы не можете изменить то, что передается. Лучше всего использовать переданный вам Object и передать его в Button, как я делал выше.

1

Ответ Андрея превосходный, и именно то, что я буду делать. Я просто хотел бы добавить к фрагменту кода, который он написал, потому что эта пустая строка выглядит так, как будто она плачет за фрагмент, показывающий, как использовать свойства CommandArgument и CommandName System.Web.UI. 0:

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 - надеюсь, вы не против меня бросали еще некоторые вещи здесь :)

HTH,

Ричард.

+0

Не возражайте! Молодцы, приятное дополнение. –