Сбрасывает ли установка методов к событию старый метод или добавляет другой метод в свой список событий? - PullRequest
0 голосов
/ 29 ноября 2011

Меня немного смущает установка событий в .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 Ответ

1 голос
/ 29 ноября 2011

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

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

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

...