2012-05-02 64 views

回答

3

如果你想之後的第二已經顯示使用Form.Shown事件關閉第一種形式:

td.Shown += (o, e) => { this.Close(); } 
td.Show(); 

其他事件的可能有趣,請查看order of events in Windows Forms。而當然,它也可能是確定立即關閉當前形式:

this.Close(); 
td.Show(); 
+0

是否將td.shown + =(o,e)添加到TicketDetails_shown或Form1_shown? –

+0

@CocoaDev:增加了另一行代碼來澄清。有很多地方可以工作,但恕我直言,最好在'td.Show()'之前完成。 – Jon

+0

關閉父母將不起作用。 [這](http://stackoverflow.com/a/13459878/2102094)所以答案的工作,只有這個解決方案略有不同。 – ram

1

我做了這樣的事情:

TicketDetails td = new TicketDetails(getTicketID()); 
td.Show(); 
this.Hide(); 
td.Close += (object sender, EventArgs e) => 
{ 
    td.Parent.Close(); 
}; 
4

如果Form1是你作爲一個參數傳遞給Application.Run形式,那麼你不能關閉它,或者你的應用程序將退出。顯示td時,您可以做的是隱藏表格。

TicketDetails td = new TicketDetails(getTicketID()); 
td.Show(); 

// Hide the main form 
form1.Hide(); 

如果Form1是不是你的應用程序的主要形式,那麼你可以簡單地調用Close()form1

編輯@comment,

public class Form1 : Form 
{ 
    private override OnLoad(object sender, EventArgs e) { 
     DoWork(); 
    } 

    public void DoWork() { 
     // your code 
    } 
} 

然後,爲實例。

TicketDetails td = new TicketDetails(getTicketID()); 
td.Show(); 

form1.Hide(); 

// example, maybe you need to call your work method 
form1.DoWork(); 
+0

窗體不是我的主窗體,但用戶可以再次打開窗體,我需要調用Load方法 –

+0

在需要執行此工作的Form1類中創建一個新的公共方法,並且您可以從您的OnLoad和其他形式。 –

0

只要TicketDetails不是模態,那麼td.show()之後的任何代碼都會運行。

我還假設Form1是您的項目的啓動窗體。如果是這種情況,那麼使用.close會停止你的應用程序。

你嘗試過這樣的:

TicketDetails td = new TicketDetails(getTicketID()); 
td.Show(); 
Form1.Hide(); 

這顯然隱藏Form1中

感謝

保羅

+0

對不起,如果答案與上面的一樣,我不得不在回覆電話的過程中寫下:) – PaulG