对于事件我是陌生的,一直在尝试创造一个成功的事件,但是我有一个问题。
我创建了这样的事件:
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
类,这样我就不需要在处理它的方法中对其进行转换?
答案 0 :(得分:4)
您可以使用允许指定参数类型的通用版本EventHandler
。
public event EventHandler<OutputChangedEventArgs> OutputChanged;