传递自定义EventArgs作为事件的参数

时间:2018-09-25 11:34:32

标签: c# .net events

对于事件我是陌生的,一直在尝试创造一个成功的事件,但是我有一个问题。

我创建了这样的事件:

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类,这样我就不需要在处理它的方法中对其进行转换?

1 个答案:

答案 0 :(得分:4)

您可以使用允许指定参数类型的通用版本EventHandler

public event EventHandler<OutputChangedEventArgs> OutputChanged;