2012-12-16 75 views
0

我有兩個窗體窗體,第一個是初始的,第二個是在按下第一個按鈕時調用的。這是兩個不同的窗口,具有不同的任務。我爲兩個MVP模式編程。 但在main()我有這樣的:在一個應用程序上的多個Windows窗體

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    ViewFirst viewFirst = new ViewFirst();//First Form 
    PresenterFirst presenterFirst = new PresenterFirst(viewFirst); 
    Application.Run(viewFirst); 
} 

我有次Windows窗體:

我想在這個應用程序只要在第一個按鈕來運行它被點擊。我怎麼能這樣做?我的第一個WF上的按鈕是:

private void history_button_Click(object sender, EventArgs e) 
{ 
    ViewSecond db = new ViewSecond();//second Form where I have sepparate WF. 
    db.Show(); 
} 
+0

你看起來像它的代碼應該工作 - 有什麼問題嗎? –

+0

Application.Run(view);它只運行第一種形式。我也需要運行第二種形式。像這樣的東西:Application.Run(viewFirst); Application.Run(viewSecond); –

+0

當你點擊應該顯示第二個表單的按鈕時會發生什麼? –

回答

1

Application.Run(Form mainForm)可能每個線程只能運行一個表單。如果您嘗試使用Application.Run運行在同一線程上第二個形式,下面可能會引發異常

System.InvalidOperationException was unhandled 

Starting a second message loop on a single thread is not a valid operation. Use 
Form.ShowDialog instead. 

所以,如果你想打電話Application.Run再跑Form,你可以稱之爲一個新的線程下。

private void history_button_Click(object sender, EventArgs e) 
{ 
    Thread myThread = new Thread((ThreadStart)delegate { Application.Run(new ViewSecond()); }); //Initialize a new Thread of name myThread to call Application.Run() on a new instance of ViewSecond 
    //myThread.TrySetApartmentState(ApartmentState.STA); //If you receive errors, comment this out; use this when doing interop with STA COM objects. 
    myThread.Start(); //Start the thread; Run the form 
} 

謝謝,
我希望對您有所幫助:)

+0

非常感謝! :)它的工作! –

+0

@ShukhratRaimov沒問題!很高興我能幫上忙。祝你今天愉快 :) –

0

我不知道你在哪裏設置演示你的第二個形式。您應該在創建ViewSecond表單時進行設置。試試這個按鈕點擊事件:

private void history_button_Click(object sender, EventArgs e) 
{ 
    ViewSecond viewSecond = new ViewSecond();//Second Form 
    PresenterSecond presenterSecond = new PresenterSecond(viewSecond); 
    db.Show(); 
} 
相關問題