为事件设置方法是重置旧方法还是在其事件列表中添加另一个方法?

时间:2011-11-29 16:59:11

标签: .net events methods delphi-prism mousedown

我对在.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 个答案:

答案 0 :(得分:1)

可以回答“它取决于”,但是,如果事件是根据.NET指南设计的,那么按照您的方式添加事件,意味着将其添加到事件处理程序列表中< em> not 删除旧的处理程序。这对于所有.NET自己的事件来说都是如此,对于任何其他精心设计的事件都应如此。

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

如果您自己定义事件,则可以通过覆盖add - 访问者或remove - 访问者来覆盖此行为。在这种情况下,您负责正确存储事件处理程序。但是,这几乎不需要手工完成。