2009-02-04 15 views
0

У меня есть около 10 кнопок в моей форме, и я хочу, чтобы они вызывали один и тот же обработчик события Click.Общие обработчики событий в VB.NET

Но для этого мне нужно, чтобы обработчик события был обобщен, и у нас нет «этого» ключевого слова в VB.NET, чтобы обратиться к элементу управления, вызвавшему событие.

Как реализовать функциональность «этого» ключевого слова в VB.NET?

Я хочу, чтобы иметь возможность написать обработчик события, который выполняет следующие действия:

Private Sub cmdButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdButton1.Click 

    currentTag = this.Tag 

End Sub 

ответ

7

Как реализовать функциональность «этого» ключевого слова в VB.NET?

thisMe в VB. Однако это не имеет никакого отношения к вашему коду и относится к содержащему классу, в вашем случае, скорее всего, текущий Form. Вы должны получить доступ к параметру sender объекта, после приведения его в Control:

currentTag = DirectCast(sender, Control).Tag 
+0

Мои мысли точно –

+0

Это заставляет меня задаться вопросом, почему отправитель не объявлен в качестве контроля в .NET ... Я предполагаю, потому что отправитель также может быть форма или что-то. – Powerlord

+1

R. Bemrose: поскольку эта общая сигнатура метода для обработчиков событий используется не только для событий Control! Фактически, он должен использоваться для * всех * событий. В прошлых версиях .NET требовалась общая подпись из-за отсутствия контравариантных делегатов. Это больше не относится к текущим версиям VB и C#. –

0

Я думаю, что вы хотите ключевое слово Me.

0

В VB.NET this упоминаются в качестве me, и решения для Вашего второго вопроса относительно обработчиков для VB.NET: вы можете добавить Handles в конце Private Sub заявления, как:

Private Sub cmdButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
    Handles cmdButton1.Click, 'cmdButton2.click, cmdButton3.click' 

    currentTag = this.Tag 

End Sub