2009-10-13 61 views
0

我有一个子表单,里面有一个查找表单。我查找窗体的所有者设置为子窗体像这样:如何将MDI子项设置为另一个窗体的所有者?

private void ShowFindForm() 
{ 
    FindForm.Show(this); 
} 

,然后让我访问是这样的性质:

private void FindNext() 
{ 
    TreeNode matchingNode = ... 
    ... etc 
    ... etc 

    OwnerForm form = this.Owner as OwnerForm; 
    form.TreeView.SelectedNode = matchingNode; 
} 

,直到我推所有者的形式为这工作完全正常MDI表格,由此MDI表格立即获得查找表格的所有权并将其全部混淆。我如何解决这个问题?

UPDATE:

我可以解决这个黑客通过MDI窗体的MdiChildren财产迭代,直到我找到我想要的形式,但是这似乎有点牛仔十岁上下。

回答

0

一个简单的解决这个问题是你的子窗体像这样上创建一个公共OwnerForm属性:

public OwnerForm myOwner; 

,然后编辑ShowFindForm()方法是:

private void ShowFindForm() 
{ 
    FindForm.myOwner = this; 
    FindForm.Show(this); 
} 

,然后改变子窗体的FindNext()方法中的倒数第二行:

OwnerForm form = this.myOwner; 

myOwner应该可能实际上是一个私有财产与公共获取和设置方法,但这只是为了说明原则。基本上,不是假设你的子窗体的所有者是你想要访问的属性的窗体(假设在MDI世界中打破了,就像你找到的那样),你明确地创建了一个你想要的窗体的引用。作为一个方面说明,很多人会认为你的代码示例违反了封装的OOP原则,因为你是从另一个表单操纵一个表单的控件。我看到了更糟糕的反人类罪行。

+0

他他。这真的很有意义。我要把它归结为迟到的事实,我已经编程了6个小时不停,我还没有一罐红牛。无论是那个还是我都不是那么聪明!队友的欢呼声。 – woodstock 2009-10-13 22:40:40

相关问题