2013-01-16 35 views
1

在我的WinForms应用程序我使用form.ActiveForm从另一种形式了很多次。这是因为我不想形式的新实例,但只需要拿形式向前方或以不同的方式设置的组件。然而,我注意到,当我最小化的形式,form.ActiveForm返回一个NullReferenceException。我可以做什么以便我可以访问这个最小化的表单?似乎没有一种方法。有没有另一种方法来做到这一点?如何从另一种形式访问最小化形式,而无需创建一个实例?

回答

1

使用Application.OpenForms找到正确类型的形式:

foreach (var f in Application.OpenForms) 
{ 
    if (f is MyForm) 
    { 
     // do something... 
     break; 
    } 
} 
+0

我发现这是一个更好的解决方案。谢谢 :) – Bernice

1

商店最小化形式在主窗体字段,并获得这种方式。如果表格被最小化,那么它不是“活动的”。然而,使用该字段,您仍然可以访问它。

0

保存到最小化形式的引用。如果你喜欢,你可以用第二种形式创建一个公共属性存储:

public MyForm myForm; 

然后将其设置:

MyForm frm = new MyForm(); 
frm.myForm = (first form reference here); 

然后第二种形式可以直接参考使用myForm第一种形式。

+0

是的,这是有道理的。但如果我甚至不必从FRM是myForm的参考?我是否将表单设置为不同的表单? – Bernice

+0

可能更好的是你有一个名为FormManager的类,它带有一个'List

' –

+0

@Bernice:我不确定你的意思是“继续将表单设置为不同的形式”。只需将其设置为表单的实例即可。 (有多少人?)您需要以这种或那种方式存储参考,我只是建议了一种可以做到的方法。如果不在某处存储对该表单的引用,则无法访问现有表单。 –