代码改变世界

MDI父窗体执行子窗体的事件

2012-10-11 21:26  极无宪  阅读(327)  评论(0)    收藏  举报

我觉得这里分2种情况。

1、你的所有子窗体都是同一种类型,假设都是SubWinForm类,那么在你的SubWinForm类型中实现对应的Add或者Edit方法,然后要解决的问题,就是在点击按钮的时候得到当前活动的窗体引用,这很简单,通过Form类型的ActiveMdiChild属性就能得到,因此可以通过如下示例代码处理:

(this.ActiveMdiChild as SubWinForm).Add()

 

2、如果你的子窗体类型不止一种窗体类,比如有SubWinFormA、SubWinFormB 2种类型,就无法直接通过第一种方式处理,但是可以变通一下,虽然他们是不同类型,但是都有部分同样的方法,比如Add、Edit,因此可以定义一个接口,抽象出这些共同的方法,然后所有需要的子窗体类都继承和实现这个接口,就可以使用第一种方法处理了。

比如我们定义一个接口:

 

Code Snippet

public interface IDataProcess
{
    void Add();
    void Edit();
}

 

 

然后SubWinFormA和SubWinFormB都实现这个接口:

 

Code Snippet

public class SubWinFormA : Form, IDataProcess

{

//实现针对SubWinFormA中的Add和Edit方法......

}

 

public class SubWinFormB : Form, IDataProcess

{

//实现针对SubWinFormB中的Add和Edit方法......

}

 

 

 

然后就可以利用第一种方法进行处理了,比如在ToolStripAdd的事件处理方法中:

 

Code Snippet

IDataProcess dataProcess = this.ActiveMdiChild as IDataProcess;

if (dataProcess == null)

{

MessageBox.Show("对不起,当前活动窗体不支持新增操作");

return;

}

dataProcess.Add();

 
转 http://social.microsoft.com/Forums/id-ID/visualcshartzhchs/thread/6e6d8f40-7314-44a9-be39-deccdc175484