Setzen Sie die alte Methode ein oder fügt in seiner Ereignisliste eine andere Methode hinzu?
-
25-10-2019 - |
Frage
Ich bin wenig verwirrt darüber, Ereignisse in .NET festzulegen.
Ich habe Methoden, die wie folgt auf MouseDown eingestellt sind.
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;
Oben Code wird jedes Mal aufgerufen, wenn ein Mausup abgefeuert wird. Da der Code gerade das MouseDown -Ereignis auf eine Methode festlegt, wird die bereits festgelegte oder nur eine andere Ereignismethode in seiner Ereignisliste die alte Methode zurückgesetzt ...
Lösung
ich könnte Antwort "Es kommt darauf an. nicht Entfernen Sie die alten Handler. Dies gilt sicherlich für alle Ereignisse von .NET und sollte für nahezu jedes andere gut gestaltete Ereignis zutreffen.
Wenn Sie ein Ereignis aus der Liste entfernen möchten, verwenden Sie die -=
Operator.
Wenn Sie selbst ein Ereignis definieren, können Sie dieses Verhalten überschreiben, indem Sie das überschreiben add
-Accessor oder der remove
-Accessor. In einem solchen Fall sind Sie für die ordnungsgemäße Aufbewahrung der Event -Handler verantwortlich. Dies ist jedoch kaum notwendig, um von Hand zu tun.