单播事件访问器的应用

  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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值