单播事件访问器的应用

    技术2022-05-11  66

      public delegate void TreeSelectEventHandler(string str);  public delegate void FindEventHandler(string str);  static readonly object TreeSelectEventKey=new object();  static readonly object FindEventKey=new object();  private Hashtable handlers=new Hashtable();

      public MainFrm()  {   //   // Windows 窗体设计器支持所必需的   //   InitializeComponent();   FmMain main=new FmMain();   main.TopLevel=false;   main.Dock=DockStyle.Fill;   this.pnlWin.Controls.Add(main);   main.Show();

       //   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码   //  }

      /// <summary>  /// 清理所有正在使用的资源。  /// </summary>  protected override void Dispose( bool disposing )  {   if( disposing )   {    if (components != null)     {     components.Dispose();         }   }   base.Dispose( disposing );  }

      protected void AddEventHandler(object eventKey, Delegate handler)  {   lock(this)   {    if (handlers[eventKey] == null)    {     handlers.Add( eventKey, handler );    }    else    {     handlers[ eventKey ] = handler;    }

       }

      }

      protected void RemoveEventHandler(object eventKey)  {   lock(this)   {    handlers.Remove( eventKey );   }  }

      protected Delegate GetEventHandler(object eventKey)  {   return (Delegate) handlers[ eventKey ];  }

      public event TreeSelectEventHandler TreeAfterSelected  {   add { AddEventHandler(TreeSelectEventKey, value); }   remove { RemoveEventHandler(TreeSelectEventKey); }  }

      public event FindEventHandler GoFind  {   add{AddEventHandler(FindEventKey,value);}   remove{RemoveEventHandler(FindEventKey);}  }

      protected virtual void OnTreeAfterSelected(string str)  {   TreeSelectEventHandler handler =     (TreeSelectEventHandler) GetEventHandler( TreeSelectEventKey );   if (handler != null)   {    handler(str);   }  }

      protected virtual void OnGoFind(string str)  {   FindEventHandler handler=(FindEventHandler)GetEventHandler(FindEventKey);   if(handler!=null)   {    handler(str);   }

      } 


    最新回复(0)