0

我对在 .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 事件设置为一个方法,它是否会重置已设置的旧方法或保留它以及其事件列表中的另一个事件方法...

4

1 回答 1

1

可以回答“这取决于”,但是,如果事件是根据 .NET 准则设计的,那么按照您的方式添加事件意味着将其添加到事件处理程序列表中,而不是删除旧的处理程序。这对于所有 .NET 自己的事件当然是正确的,并且对于几乎任何其他精心设计的事件都应该是正确的。

如果要从列表中删除事件,请使用-=运算符。

如果您自己定义事件,则可以通过覆盖add-accessor 或remove-accessor 来覆盖此行为。在这种情况下,您有责任正确存储事件处理程序。然而,这几乎不需要手动完成。

于 2011-11-29T17:09:50.347 回答