Сбрасывает ли установка методов к событию старый метод или добавляет другой метод в свой список событий?
Я немного запутался в настройке событий в.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. В таком случае вы несете ответственность за правильное хранение обработчиков событий. Однако вряд ли это когда-либо необходимо делать вручную.