自定义控件-MDI子窗体-MDI父窗体的三层引用(C#)

VC#中经常出现多个模块之间属性传递的问题,我最近就遇见一个MDI下的自定义控件的引用问题

问题描述
1,工程是一个MDI窗体,父窗体中有多个MDI子窗体和工具栏菜单
2,有一个自定义控件,是属于MDI子窗体的,比如说这个MDI子窗体叫A,这个自定义控件叫a
3,想在a中调用MDI父窗体的一个菜单按钮事件
以上是我遇到的问题,最后给出解决方案共享

方案如下:

1添加一个全局的属性 ,也就是在A上(mdi窗体)

 

1 MDIParent mdiFrame = null;   
2 public fomCustomer(MDIParent m)   
3 {   
4     mdiFrame = m;  
5 

 

2,加载自定义控件

 

usCustomerQuery CustomerQuery = new usCustomerQuery(mdiFrame);//注意这里加载了属性mdiframe   
CustomerQuery.Parent = this;   
CustomerQuery.Dock 
= DockStyle.Fill;   
CustomerQuery.Show();   

 

3,自定义控件的初始化,也就是属性传递

 

1 public MDIParent mdi = null;   
2 public usCustomerQuery(MDIParent m)   
3 {   
4     InitializeComponent();   
5     mdi = m;//这里,我们就可以用Mdi变量引用父窗体的所有函数了   
6 }  
7 

 

4,引用

 

1 private void pbox_Return_Click(object sender, EventArgs e)   
2 {   
3     if (mdi != null)   
4        mdi.NavMenuItem_Click(sender,e);//引用了父窗体中NavMenuItem菜单的处理方法   
5 }  
6 

 

总结:
这里是MDI父-MDI子-MDI子中的自定义控件,这三层引用。由于都是动态引用,造成MDI父的方法不能被MDI子中自定义控件直接引用,所以要通过一个共同的属性来传递,这个属性也可以理解为C++中的指针或者句柄。刚用C#的确有点不习惯,好在是解决了。呵呵

 

posted on 2009-11-24 11:39  李福伟  阅读(2617)  评论(1编辑  收藏  举报

导航