2012-10-08 53 views
0

我很抱歉,如果這似乎微不足道,但我似乎無法理解這一個。這裏的其他問的問題略有不同,所以這裏是我的問題:不能在Main()中調用窗體的公共函數?

我有一個的MainForm是去

public partial class MainForm : Form 
{ 
    public MainForm() 
    { 
     InitializeComponent(); 
    } 
    public void activateButton() 
    { 
     button1.PerformClick(); 
    } 
//........ 

我想打電話給activateButton()Main()是去

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Form myForm = new MainForm(); 
    Application.Run(myForm); 
    myForm.activateButton() // error 
} 

爲什麼不能從myForm看到公共方法activateButton()

回答

2

正如其他評論者指出的,由於您的變量是Form類型而不是MainForm,您將會有錯誤。但還有一個問題。一旦你調用Application.Run(表單),應用程序就進入了主消息泵循環。這本質上是一個無限的while()循環,它只是檢查用戶輸入並處理Windows消息分派(您可以通過覆蓋表單的WndProc方法來掛鉤)。因此,在此之後,Main中的任何代碼在您關閉表單之前都不會被調用。

如果您在窗體打開後嘗試調用activateButton()方法,請嘗試在窗體的構造函數中調用它,或者通過重寫OnLoad()並在其中調用它。

+0

哇,這是我碰到的確切問題,我像你說的那樣固定它,但並不知道爲什麼。謝謝你們這麼清楚地表明這一點! – user1502776

3

變量myForm的類型爲Form。如果你把它聲明爲MainForm你就可以訪問你的方法:

MainForm myForm = new MainForm(); 
myForm.activateButton() // No error. 
+0

我知道這是件小事,非常感謝! – user1502776

1
MainForm myForm = new MainForm(); 

在你的原代碼,編譯時類型爲Form,所以activateButton是不可見的。

相關問題