ASP.NET Click Event Handle - Как передать аргумент в VB.NET? - PullRequest
0 голосов
/ 20 марта 2009

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

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

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 ]

2 голосов
/ 20 марта 2009

Вот лучший способ сделать это. Сначала подключите свои кнопки как обычно:

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, как я. сделал выше.

1 голос
/ 20 марта 2009

Эндрю ответ превосходен, и именно то, что я буду делать. Я просто хотел бы добавить к фрагменту кода, который он написал, потому что эта пустая строка выглядит так, как будто она вызывает фрагмент, показывающий, как использовать свойства CommandArgument и CommandName 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

Энди - надеюсь, ты не возражаешь, если я добавлю сюда еще кое-что:)

НТН,

Ричард.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...