Я бы передал контроль над своей формой в другой класс, где я буду создавать события для элемента управления, его родительского элемента управления и т. Д. Мне также необходимо отделить эти события в какой-то момент. Но мне нужно убедиться, что я не буду дублировать события, если событие уже подключено.Есть ли способ реорганизации событий, связанных с отдельным статическим методом?
Так что я всегда присоединять события, как это, например, для:
internal static void X(Control c, MouseEventHandler mouseDownEvent)
{
c.TopLevelControl.MouseDown -= mouseDownEvent;
c.TopLevelControl.MouseDown += mouseDownEvent;
}
Теперь я должен был бы подобный случай крепления для других обработчиков тоже. Для, например,
internal static void X(Control c, EventHandler event)
{
c.Enter -= event;
c.Enter += event;
}
Теперь я не хочу, чтобы распылить вокруг этого -=
и +=
все вокруг, а не хотели бы иметь одну простую функцию полезности, так что я могу назвать его везде.
Что-то вроде:
internal static void AttachEvent(this Control c,
Func<Control, MouseEventHandler> e,
MouseEventHandler m)
{
e(c) -= m;
e(c) += m;
}
Так что я могу назвать:
AttachEvent(c, control => control.MouseDown, mouseDownEvent);
Но это не компилируется, я получаю две ошибки:
The event 'System.Windows.Forms.Control.MouseDown' can only appear on the left hand side of += or -=
и
The left-hand side of an assignment must be a variable, property or indexer
Я хотел бы иметь AttachEvent
принимать какое-либо событие в качестве входного аргумента, но если это слишком сложно, я могу жить с одними MouseEvents.
Зачем вам удалять обработчик, чтобы добавить его снова сразу же после его удаления? – zeebonk
@zeebonk Чтобы удалить существующий обработчик (во избежание дублирования). Если я не удаляю, может быть больше обработчиков для события, которое будет делать те же самые taks несколько раз – nawfal