Расширение FormClosedEventArgs - PullRequest
0 голосов
/ 15 апреля 2019

Ниже приведено лучшее понимание событий и наследования C #.И, вероятно, найти лучший, более эффективный или более правильный способ сделать это.

Допустим, я хочу расширить FormClosedEventArgs, чтобы добавить свойство строки для настраиваемого сообщения, и у меня есть две формы: Form1 и Form2.Form1 вызывает Form2.

Итак ...

public class CustomArgs : FormClosedEventArgs
{
    public string Message { get; private set; }
    public CustomArgs(CloseReason closeReason, string message) : base(closeReason)
    {
        Message = message;
    }
}

В Form2 я переопределяю метод OnFormClosed

    protected override void OnFormClosed(FormClosedEventArgs e)
    {
        base.OnFormClosed(new CustomArgs(e.CloseReason,"customMessageString"));
    }

Тогда в Form1 у меня есть что-то вроде этого:

    private void Button1_Click(object sender, EventArgs e)
    {
        using(Form2 frm = new Form2())
        {
            frm.FormClosed += FormClosedEventHandler;
            frm.ShowDialog();
        }
    }

и

    private void FormClosedEventHandler(object sender, FormClosedEventArgs e)
    {
        Console.WriteLine(string.Format("CloseReason: {0}, Message: {1}.", e.CloseReason.ToString(), ((CustomArgs)e).Message));
    }

Проблема в том, что я не чувствую себя комфортно при приведении FormClosedEventArgs в CustomArgs просто для получения свойства сообщения.Даже если я делаю что-то вроде следующего, это все равно кажется мне неправильным.

        if (e is CustomArgs)
            Console.WriteLine(string.Format("CloseReason: {0}, Message: {1}.", e.CloseReason.ToString(), ((CustomArgs)e).Message));
        else
            Console.WriteLine(string.Format("CloseReason: {0}", e.CloseReason));

Это правильный путь для достижения этого?Или я должен создать новое пользовательское закрытое событие, которое получает CustomArgs в качестве параметра и вызвать его в Form2, переопределяя OnFormClosed, чтобы в Form1 я мог подписаться на это новое событие?Кажется, немного излишним ради безопасности типа.

Любые объяснения, предложения или литература по этому вопросу будут высоко оценены.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...