Поведение .NET Inject при запуске событий - PullRequest
1 голос
/ 14 апреля 2011

Итак, у меня есть метод, который я хочу вызывать каждый раз, когда определенный объект, в этом случае Form вызывает конкретное событие, в данном случае FormClosing. Теперь я могу создать MyForm, который наследует Form, а затем сделать то, что мне нужно, что-то вроде

//Not Sure if this is 100% how you would do this but you get the idea
private void formClosing(Object sender, FormClosingEventArgs e)
{
    MyMethod(this);
    RaiseEvent MyFormClosing;
}

Однако, что, если я не хочу делать вышеуказанное. Есть ли какая-то структура или шаблон, который позволил бы мне внедрить в код поведение, которое нужно? *

Если это не достаточно ясно, я могу объяснить больше.

1 Ответ

1 голос
/ 14 апреля 2011

Достаточно ли будет добавить свойство, которое вы можете установить в true или false, в класс MyForm, чтобы он не вызывал метод? Лично я переопределил бы метод Закрытия, а не подписывался на событие.

protected override void OnFormClosing(FormClosingEventArgs e)
{
   if(CallMyMethod)
   {
       MyMethod(this);
   }

   base.OnFormClosing(e);
}

Если MyMethod является внешним по отношению к форме, вы можете вместо этого использовать делегатов (возможно, также лучше назвать)

public Action<Form> MyMethod { get; set; }
protected override void OnFormClosing(FormClosingEventArgs e)
{
   if(MyMethod != null)
   {
       MyMethod(this);
   }

   base.OnFormClosing(e);
}

но на самом деле, поскольку это форма, если вы хотите вызвать внешний метод, было бы лучше подписаться на событие закрытия форм.

** OP Edit **

Это было достаточно близко, чтобы привести меня туда, куда я хотел пойти, создавая частичный класс, унаследованный от Form, и переопределяя события там, чтобы делать то, что я хотел.

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