我有一个包含查找表单的子表单。我将查找表单的所有者设置为子表单,如下所示:
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表格迅速取得查找表格的所有权并将其全部搞砸。我该如何解决这个问题?
更新:
我可以通过迭代MDI表单的MdiChildren属性来解决这个问题,直到找到我想要的形式,但这看起来有点像牛仔。
答案 0 :(得分:0)
此问题的一个简单解决方案是在您的子表单上创建一个公共OwnerForm
属性,如下所示:
public OwnerForm myOwner;
然后将ShowFindForm()
方法修改为:
private void ShowFindForm()
{
FindForm.myOwner = this;
FindForm.Show(this);
}
然后将子表单的FindNext()
方法中倒数第二行更改为:
OwnerForm form = this.myOwner;
myOwner
实际上可能应该是具有公共get和set方法的私有属性,但这只是为了说明原理。基本上,不是假设您的子表单的所有者是您要访问其属性的表单(如您所见,MDI世界中断的假设),您明确地创建了对所需表单的引用。 / p>
作为旁注,许多人会认为您的代码示例违反了OOP封装原则,因为您正在从另一种形式操作一个表单的控件。我自己也看到了更严重的危害人类罪。