2011-08-31 167 views
0

當我使用表單X創建應用程序時我使用:X->Show();應用程序立即終止。所以我使用X->ShowDialog();方法。現在UI停止執行該行後面的任何內容。消息框將僅在我關閉表單X後顯示,更新和文本框更改不會導致任何結果... ???如何擺脫這個問題?我只想顯示一個表單並通過用戶交互改變它的一些內容,並且用戶應該關閉它(而不是程序)......當我編程Windows程序時,它不應該是全世界最容易的事情Windows與Windows窗體?大聲笑!Windows窗體問題

int main(array<System::String ^> ^args) 
{ 
    Application::EnableVisualStyles(); 
    Application::SetCompatibleTextRenderingDefault(false); 

    Form1^ X = gcnew Form1(); 

    X->ShowDialog(); 
    MessageBox::Show("test", "Warning", MessageBoxButtons::OK); 
    // message box not shown, only after closing the form... 
    return 0; 
} 
+0

X-> Show()對於名爲X的Form類是無效的語法。重現此問題的Post代碼。 –

+0

推動...地球上有70億人知道Windows,沒有人可以回答簡單的問題。我不能自己做...否則我不會問lol – hmm

+1

決定你的想法,你想'main'繼續(用'MessageBox'然後退出程序)或者你想要嗎?該程序保持運行直到表單退出?你不能擁有兩個。 –

回答

3

不確定C++ - CLI,但現在在C#的主要形式開始,以這種方式顯示:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

,所以我可以在這裏是錯誤,但如果是你的Application.Run

+1

正確,需要消息循環,'Application :: Run'是WinForms標準消息循環。 –

+0

消息循環....我失去了很好的舊時代的VC++ Windows編程... :) –

+0

有了這個消息循環,我有同樣的結果。我的消息框直到我關閉表單纔會顯示。我不想關閉它。我想在窗體上看到消息框。 – hmm

0

你想要做的是不合邏輯的。你可以使用ShowDialog()來保持程序運行,直到表單關閉,你可以繼續瀏覽程序並立即退出。你期望你的程序暫停在哪裏?你預計什麼時候關門?

最簡單的「解決方案」在屏幕上同時獲得是對次序相反:

MessageBox::Show("test", "Warning", MessageBoxButtons::OK); 
X->ShowDialog(); 

那麼你會在屏幕上同時獲得。否則,從窗體內(在構造函數OnLoad中,在任何地方)運行MessageBox。