2009-08-12 59 views
0

情況是這樣的我有一個控件,它有事件在控件的定義中呈現,對於這個事件是附加處理程序我正在尋找一種方式來顯示某種類型的消息,如果在某些類中使用此控件另一個處理程序附加到此事件 恭喜, Iordan避免再次附加事件

回答

0

這並不是一個好方法。使用事件時,控件通常不應依賴於附加的事件處理程序的數量。無論是否有0或27個事件處理程序對事件做出反應,它都應該可以工作。如果你想有一個機制,你有更多的控制權,你應該考慮使用委託。

如果出於某種原因限制使用事件模型並希望控制事件處理程序的分配,一種方法可能是繼承原始類,在該類中創建具有相同名稱和簽名的事件作爲基類(使用new關鍵字使原來的事件是隱藏的),並跟蹤事件處理程序如何安裝和拆卸:

public class BaseClass 
{ 
    public event EventHandler SomeEvent; 
} 

public class MyClass : BaseClass 
{ 
    private int _refCount = 0; 
    public new event EventHandler SomeEvent 
    { 
     add 
     { 
      if (_refCount > 0) 
      { 
       // handler already attached 
      } 
      base.SomeEvent += value; 
      _refCount++; 
     } 
     remove 
     { 
      base.SomeEvent -= value; 
      _refCount--; 
     } 
    } 
} 
0

我很困惑。

你能檢測到'+ = new EventHandler(...)'的調用並停止它...什麼?

我認爲你只需要更好地組織你的代碼。或者重新提出你的問題。

+0

public event EventHandler MyEvent { [MethodImpl(MethodImplOptions.Synchronized)] add { _myEvent = (EventHandler)Delegate.Combine(_myEvent, value); } [MethodImpl(MethodImplOptions.Synchronized)] remove { _myEvent = (EventHandler)Delegate.Remove(_myEvent, value); } } ... 

}

更多信息認爲他是希望只顯示一條消息時,處理程序訂閱渲染事件....不認爲這是可能的。 – James 2009-08-12 07:55:11

+0

嗯可能是我有點不清楚這裏的情況是我有我的控制繼承DataGridView控件我已附加CellPaint事件的Eventhandler。我希望如果有人使用我的控件附加了另一個eventHandler來處理這個事件以發出一些消息,說明這會導致不同的問題 祝你好運, Iordan – IordanTanev 2009-08-12 07:55:35

2

不公開揭露的事件。將其公開爲屬性。這會給你控制時,外部類的附加處理

MyClass類 { 私人事件處理_myEvent;在這這裏

http://msdn.microsoft.com/en-us/magazine/cc163533.aspx

+0

想想這是他正在尋找的。不錯,不知道你可以在C#中做這種事情 – James 2009-08-12 08:05:50