2012-05-02 3 views
1

を作成したフォームを閉じると、ここに私のコードですC#の新しいWinフォームを開いて、それを

をForm1

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

私はTDが表示されたときに、Form1を閉じたいです。

+0

は(あなたがthis.closeてみました持って隠します。 – coder

答えて

3

を興味深いことに、order of events in Windows Formsをチェックしてください。そしてもちろん、また、すぐに現在のフォームを閉じるためにOKかもしれません:

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

td.shown + =(o、e)をTicketDetails_shownまたはForm1_shownに追加しますか? –

+0

@CocoaDev:明確にするために別のコード行を追加しました。動作する場所はたくさんありますが、IMHOでは 'td.Show()'の直前に行うのが最善です。 – Jon

+0

親を閉じることはできません。 [This](http://stackoverflow.com/a/13459878/2102094)SOの答えは、このソリューションとわずかに異なります。 – ram

1

私はこのような何かやった:その可能性のある他のイベントのために

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

:あなたは秒後に最初のフォームを閉じたい場合はForm.Shownイベントの使用を表示していた

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は、アプリケーションのメインフォームではありません場合は、単にform1Close()を呼び出すことができます。

編集@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

関連する問題