Сбрасывает ли установка методов к событию старый метод или добавляет другой метод в свой список событий?

Я немного запутался в настройке событий в.NET.

У меня есть методы, которые установлены в MouseDown следующим образом.

 if theTool = TMakerTool.tmtSelect then
 begin
   MouseDown += new System.Windows.Forms.MouseEventHandler(@SelectMouseDown);
   Cursor := Cursors.Arrow;
 end
 else
 begin
   MouseDown += new System.Windows.Forms.MouseEventHandler(@Maker_MouseDown);
   Cursor := Cursors.Cross;
 end;

Выше код вызывается каждый раз, когда запускается mouseup. Поскольку код просто устанавливает событие MouseDown для метода, он сбрасывает старый метод, который уже был установлен, или сохраняет его, и просто другой метод события в своем списке событий...

1 ответ

Решение

Я мог бы ответить "это зависит", однако, если события разрабатываются в соответствии с рекомендациями.NET, добавление события так, как вы делаете, означает добавление его в список обработчиков событий, а не удаление старых обработчиков. Это, безусловно, верно для всех собственных событий.NET и должно быть верно для любого другого хорошо спроектированного события.

Если вы хотите удалить событие из списка, используйте -= оператор.

Если вы определяете событие самостоятельно, вы можете переопределить это поведение, переопределив add-Аксцессор или remove-accessor. В таком случае вы несете ответственность за правильное хранение обработчиков событий. Однако вряд ли это когда-либо необходимо делать вручную.

Другие вопросы по тегам