我有一个MDI父窗口,可以包含特定子项的多个实例,称之为 frmChild 。现在,当从父级单击特定控件时,我需要获取活动的frmChild并且从frmChild调用特定方法
下面是我想要实现的图像(获取活动的MDI子节点并从该类调用特定方法):
a busy cat http://i47.tinypic.com/aurv7.jpg
现在每个frmChild都通过以下方式实例化:
private void newFileToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmNewDocument = new frmNewDocument();
frmNewDocument.MdiParent = this;
frmNewDocument.Show();
}
当我想从活动的frmChild 调用一个方法时,我正在尝试以下操作并且卡住了:
private void saveFileToolStripMenuItem1_Click(object sender, EventArgs e)
{
/* get active MDI child*/
Form frmActiveNewDocument = this.ActiveMdiChild;
/* make sure MDI child is a "New Document" type form */
if (frmActiveNewDocument.GetType() == frmNewDocument.GetType())
{
/* invoke a method from active frmChild here */
}
}
我还在学习OOP,并确信这是一个原则。如果可以在文章中提到,那也会很棒。
**注意:我读到对frmChild的干扰是解决这个问题的最佳方法,因此Main表单不需要在每个frmChild中进行挖掘,所以我创建了一个frmChild使用的接口,这是:**
public interface NewFileFormInterface
{
void saveFile();
}
现在, saveFile()是我想从Main调用的方法,它在frmChild中实现。
有关此问题的任何帮助以及我可以研究的一些关键字都会很棒。
TIA!
答案 0 :(得分:2)
frmNewDocument child = ActiveMdiChild as frmNewDocument;
if (child != null)
{
child->saveFile();
}
as关键字执行运行时转换。如果对象(在本例中为ActiveMdiChild)为null或不是as类型,则结果将为null。
http://msdn.microsoft.com/en-us/library/cscsdfbt.aspx
您可能也有兴趣阅读: .Net Naming Convention Guidelines
答案 1 :(得分:1)
试试这个:
if (ActiveMdiChild is frmNewDocument)
{
(ActiveMdiChild as frmNewDocument).saveFile();
}
答案 2 :(得分:1)
我知道这已经老了,但这一直对我有用。
在子代码中:
public void SaveFile()
{
// Some code goes here.
}
在父代码中:
frmNewDocument child = this.ActiveMdiChild as frmNewDocument;
if(child != null)
{
child.SaveFile();
}
希望这可以帮助那些正在寻找更简洁的答案的人。
答案 3 :(得分:0)
我是这样做的。 “ AuditAddMod”是一种形式。我有平行的孩子。有一种公共的“ PassData()”方法,该方法被调用,并在同级表单中执行我需要的操作。
# ...
print('input: ',input[0,0:3,100:105,100:105])
break