Передача пользовательских EventArgs в качестве параметра события - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в событиях и пытаюсь создать его и успешно, но у меня есть один вопрос.

Я создал событие, подобное этому:

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 голосов
/ 25 сентября 2018

Вы можете использовать общую версию EventHandler, которая позволяет указывать тип аргумента.

public event EventHandler<OutputChangedEventArgs> OutputChanged; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...