2014-06-24 62 views
0

我有一個有很多控件的Form1,我需要從另一個靜態類訪問/編輯控件值。由於我在表單上有很多控件,所以需要一些時間來定義集合並從每個單元中獲取。我想知道是否有任何方法可以在靜態類中定義Form1的實例,以便我可以訪問此類中Form1的所有控件?從靜態類訪問表單控件

這裏是靜態類的結構:

public static class Glob 
{ 
    public static int int1; 

    public static int Func1() 
    { 
     return 10; 
    } 
} 

在此先感謝。

PS:我使用靜態類和靜態方法和變量,因爲我需要能夠輕鬆地從任何其他形式和類訪問其變量和方法。這樣我就不需要每一次需要調用它們就定義一個類的實例。另外,通過靜態類的幫助,我可以在類和表單之間共享變量。

+0

似乎您想要注入到其他表單和類中的組合根。可能不止一個。考察單一責任原則和依賴注入。 –

+2

帶有應用程序中的所有內容的字段的大型全局靜態類通常是一個糟糕的主意。它會引入意想不到的錯誤,使得調試更加困難,單元測試變得非常困難。 –

+0

對於這個問題,部分類比靜態類更好嗎?我之前定義了部分類。它的工作,但我不得不將所有類的名稱更改爲classname.designer.cs爲了擺脫形式。 – NESHOM

回答

1

您可以在靜態形式聲明:

private static MyformType myform; 

public static void setmyform(MyformType myform1) 
{ 
    myform=myform1; 
} 

雖然,這個概念一般是不太好,也許更好的方式是通過你的形式參數稱爲靜態類的功能,使您的控制應該被公開,通過調節表格中的通配符修改器

public static void EgClearText(Textbox tb) 
{ 
    tb.Text=""; 
} 
public static void DoSomethingElseWithTheForm(MyformType myform) 
{ 
    myform.someOtherContol.Visible=false; 
} 
0

您可以將單例模式應用於表單。請注意,實例將返回對上次創建的MyForm實例的引用,因此您不應該在此處有多個MyForm實例。

支持字段:

private static MyForm _instance 

辛格爾頓存取:

public static MyForm Instance 
    { 
     get 
     { 
      return _instance; 
     } 
    } 

一旦beging使用類,可以將其參考分配給支持字段

public MyForm() 
    { 
     _instance = this; 
    } 

作爲一個邊注意;如果您有技術選擇,請查看WPF。它具有bindings以編程方式獲取和設置UI控件的值

+0

WinForms不是WPF .... –

+0

@Tetsujin no Oni單例模式適用於WinForms。 WPF是一個建議。 –

+1

當然,但由於該問題指定的WinForms,談論WPF正在向「不是答案」的領土... –