使用事件属性在主界面与用户组件之间传递事件。

一、应用场景:  

      主界面中嵌套一个用户控制,然后用户控制中有个事件需要触发,但触发后的操作则是操作主界面里面的东西。这就需要把主界面的方法传递给子界面,绑定在子界面的那个控件事件上。

  好了,我们举例现在有个用户控件,里面有个TREEVIEW;当双击TREEVIEW的节点的时候,将节点的值传递给主界面的一个TEXTBOX。那么

   1.子界面中代码如下:

     public   delegate   void  TreeViewDoubleClick( object  sender, EventArgs e);

    
public   partial   class  frmProjectList : BaseForm
    {
        
private  List < TreeViewDoubleClick >  doubleClickEvents  =   new  List < TreeViewDoubleClick > ();
        
public   event  TreeViewDoubleClick TreeView_DoubleClick
        {
            add
            {
                doubleClickEvents.Add(value);
            }
            remove { doubleClickEvents.Remove(value); }

        }
        
        
public  frmProjectList()
        {
            InitializeComponent();
            trvProject.DoubleClick 
+=   new  EventHandler(trvProject_DoubleClick);
        }

        
void  trvProject_DoubleClick( object  sender, EventArgs e)
        {
            
foreach  (TreeViewDoubleClick item  in  doubleClickEvents)
                item(sender, e);
        }
。。。。。。

    }

然后主界面代码如下:
  
代码
         private   void  MainFrame_Load( object  sender, EventArgs e)
        {
            frmProjectList projectList 
=   new  frmProjectList();
            projectList.TreeView_DoubleClick 
+=   new  TreeViewDoubleClick(projectList_trvProject_DoubleClick);
            
          
        }

        
void  projectList_trvProject_DoubleClick( object  sender, EventArgs e)
        {
            
// tsbNavigation_Click(null, null);
            
// 真正运行的事件体。

        }

 


 

     public   delegate   void  TreeViewDoubleClick( object  sender, EventArgs e);

    
public   partial   class  frmProjectList : BaseForm
    {
     
        
private  List < TreeViewDoubleClick >  doubleClickEvents  =   new  List < TreeViewDoubleClick > ();
        
public   event  TreeViewDoubleClick TreeView_DoubleClick
        {
            add
            {
                doubleClickEvents.Add(value);
            }
            remove { doubleClickEvents.Remove(value); }

        }

        
public  frmProjectList()
        {
            InitializeComponent();
            trvProject.DoubleClick 
+=   new  EventHandler(trvProject_DoubleClick);
        }

        
void  trvProject_DoubleClick( object  sender, EventArgs e)
        {
            
foreach  (TreeViewDoubleClick item  in  doubleClickEvents)
                item(sender, e);
        }
。。。。。。

你可能感兴趣的:(用户)