2011-05-31 20 views
3

我在我的Form.cs,我想在我的Program.csA連接的Program.cs而Form.cs

但是,如果函數不是靜態的,Program.cs中不能使用召喚功能它。如果它是靜態的,Form.cs不能使用它,因爲它涉及非靜態的控件。

我可以刪除我的program.cs代碼,並找到一種方法在我的form.cs中做同樣的事情,但我想知道是否有更簡單的方法。

這通常是什麼在form.cs功能確實

public void Toggle() 
    { 
     MyDomainUpDown.SelectedIndex = 3; 
    } 

的Program.cs的:

MainForm.Toggle(); 
+0

這將有助於看到函數的原型。 – CharlesB 2011-05-31 16:04:30

回答

2

爲什麼你不能從你的program.cs中訪問它?

你可以很容易地定義一個變量來保存表單,然後引用它:

static class Program 
{ 
    // Any method can now access the form 
    static Form1 MyForm; 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     MyForm = new Form1(); 
     Application.Run(MyForm); 
    } 

} 
0

表單實例在Program.cs的假想創造這樣你就可以訪問公共/從那裏的內部實例方法。

的Program.cs文件的默認實現或多或少是這樣的:

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
    } 
} 

new MainForm()創建窗體的實例。只要將其分配到一個局部變量,以調用其方法:

 var mainForm = new MainForm(); 
     mainForm.MethodToCall(); 
     Application.Run(mainForm); 
0

我不知道你的情況是什麼,但如果你不當你想調用任何非靜態有參考myForm的原因或在MyForm中定義的方法?

如果在另一方面,你必須對它的引用,後來乾脆讓MyFunction公衆和通常稱之爲:

class Program 
{ 
    MyForm myForm = new MyForm(); 
    .... 
    myForm.MyFunction(); //call here 
} 

public partial class MyForm: Form 
{ 
    .... 
    public int MyFunction() {...} 
} 

你也可以把它的靜態和參數引用添加到MyForm的實例如果出於某種實際原因這樣做的話。

public partial class MyForm: Form 
{ 
    .... 
    public static int MyFunction(MyForm myForm) {...} 
}