2013-01-16 63 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:我不確定你的意思是「繼續將表單設置爲不同的形式」。只需將其設置爲表單的實例即可。 (有多少人?)您需要以這種或那種方式存儲參考,我只是建議了一種可以做到的方法。如果不在某處存儲對該表單的引用,則無法訪問現有表單。 –