2015-03-27 2 views
0

Я работаю над формой Win. Один из моих кнопок на события мыши должны принять настроенный аргумент (heritated от EventArgs):Проблема для правильного создания события, включая настраиваемые EventArgs

private void B_Say_Click(object sender, Custom_EventArgs e) //instead of EventArgs e 
{ 
.... 
} 

(Причина в том, что этот метод может быть вызван, когда я нажал на кнопку, но и в различных других контекстах ., где мне нужно получить пользовательские данные (которые я хочу передать через Custom_EventArgs)

конечно, я включил производный класс:

public class Custom_EventArgs : EventArgs 
    { 
     public string say_string; 
    } 

компилятор генерирует эту ошибку для линии:

this.B_Say.Click += new System.EventHandler(this.B_Say_Click); 

Ошибка 3 Нет перегрузки для 'B_Say_Click' соответствует делегату 'System.EventHandler'

Если я пытаюсь использовать общую версию EventHandler:

this.B_Say.Click += new System.EventHandler<Custom_EventArgs>(this.B_Say_Click); 

я получаю: Ошибка 3 Не может неявно преобразовать тип 'System.EventHandler' в 'System.EventHandler'

Я полагаю, что подпись связанных событий кнопок в классе System.Windows.Forms.Button принимает только EventHandler ,

Поскольку Custom_EventArgs происходит от EvenArgs, я полагаю, что мы можем эксплицировать листинг Custom_EventArgs на Eventargs для решения проблемы, но я не уверен, как это сделать?

Если литье не является решением, есть ли другое решение?

Thx заранее.

+1

Вы не можете заменить подпись EventArgs своей собственной. Класс Button не знал, как его сгенерировать, или заполнить поле say_string. Это делает его немного бессмысленным. Вы можете использовать свойство тега Button, а затем, в случае, направить объект отправителя на кнопку, а затем изучить свойство Tag. Не очень, но непонятно, почему ваша кнопка должна делать больше работы, чем просто предоставить механизм щелчка. – LarsTech

ответ

1

Вы не можете изменить подпись события. Тем не менее, вы можете проверить тип переданных аргументов события.

private void B_Say_Click(object sender, EventArgs e) { 
    var customArgs = e as Custom_EventArgs; 
    if (null != customArgs) { 
     // do what you want 
    } 
} 
+0

хорошая идея спасибо :) –