积极答复者
多文档窗体中,如何通过单击父窗体按钮调用当前活动子窗体的方法?

问题
-
做数据库编程免不了要"增删改查",很多子窗体都有相似的功能,因此我想在父窗体中用相同的按钮调用活动子窗体中对应的功能,也就是说子窗体不提供菜单和工具栏,只提供要调用的方法,只有父窗体上有菜单栏和工具栏.
比如:当前有frmA/frmB/frmC三个子窗体被打开,点击父窗体frmP中的"保存"按钮btnSv,就自动调用当前活动子窗体中对应的保存方法,假定,frmA的方法名为svA(),frmB的方法名为svB(),frmC的方法名为svC().
那么这个父窗体frmP中的保存按钮btnSv的代码该如何写呢(这里面临判断子窗体、调用子窗体方法两个问题),希望各位老师给个完整的示例代码
LJH
答案
-
使用Form.ActiveMdiChild属性得到当前活动的MDI子窗体。
e.g.
先定义一个接口ISavable,表示可以保存的东西。
interface ISavable { void Save(); }
MDI主窗体中的“保存”按钮的Click事件处理器:
void SaveClick(object sender, EventArgs e) { ISavable activeChild = this.ActiveMdiChild as ISavable; if (activeChild != null) activeChild.Save(); }
每个MDI子窗体去实现ISavable接口,例如:
partial class ReallySimpleSavableForm : Form { public ReallySimpleSavableForm() { this.InitializeComponent(); } public void Save() { /*...*/ } }
- 已建议为答案 Lisa ZhuModerator 2013年2月4日 6:28
- 已标记为答案 SZLJH 2013年2月4日 6:45
全部回复
-
- 写一个接口类包含增、删、改方法,让所有子窗体都去实现
- 主窗体增加一个 "当前窗体" 的属性,切换子窗体时将当前子窗体设为 "当前窗体"
- 点击按钮时调用 "当前窗体" 对应的增、删、改方法
知识改变命运,奋斗成就人生!
- 已编辑 肖小勇Moderator 2013年2月1日 8:15
-
-
使用Form.ActiveMdiChild属性得到当前活动的MDI子窗体。
e.g.
先定义一个接口ISavable,表示可以保存的东西。
interface ISavable { void Save(); }
MDI主窗体中的“保存”按钮的Click事件处理器:
void SaveClick(object sender, EventArgs e) { ISavable activeChild = this.ActiveMdiChild as ISavable; if (activeChild != null) activeChild.Save(); }
每个MDI子窗体去实现ISavable接口,例如:
partial class ReallySimpleSavableForm : Form { public ReallySimpleSavableForm() { this.InitializeComponent(); } public void Save() { /*...*/ } }
- 已建议为答案 Lisa ZhuModerator 2013年2月4日 6:28
- 已标记为答案 SZLJH 2013年2月4日 6:45