Я новичок в событиях и пытаюсь создать его и успешно, но у меня есть один вопрос.
Я создал событие, подобное этому:
public class CustomControl : Panel
{
public event EventHandler OutputChanged; //My event
public CustomControl()
{
InitializeComponents();
}
//This event raises inside richtextbox which is inside my panel
private void OnTextChanged(object sender, EventArgs e)
{
if (OutputUpdate == OutputUpdate.OnTextChanged)
{
ValidateText();
//This is my created event
OnOutputChanged(new OutputChangedEventArgs { Asd = "Something" });
}
}
//void for this event
protected virtual void OnOutputChanged(OutputChangedEventArgs e)
{
EventHandler handler = OutputChanged;
if(handler != null)
{
handler(this, e);
}
}
}
//Custom event args class for my event
public class OutputChangedEventArgs : EventArgs
{
public string Asd { get; set; }
}
Выше код показывает объявлениемое событие с пользовательским классом для параметра EventArgs
, и теперь я покажу вам, как я реализую его в своем коде:
customControl1.OutputChanged += OnOutputChanged;
private void OnOutputChanged(object sender, EventArgs e)
{
OutputChangedEventArgs args = e as OutputChangedEventArgs;
MessageBox.Show(args.Asd);
}
Как вы можете видеть в моей имплантации, я передаю EventArgs
и затем преобразую егона OutputChangedEventArgs
, и причина этого в том, что если я попытаюсь private void OnOutputChanged(object sender, OutputChangedEventArgs e)
, я получу ошибку No overload for 'OnOutputChanged' matches delegate 'EventHandler'
Поэтому мой вопрос заключается в том, как я могу напрямую передать свой пользовательский класс EventArgs
, чтобы мне не нужно было преобразовыватьэто внутри метода, который обрабатывает это?