2016-06-02 12 views
0

私の問題はForm2を開いてForm1を開いて別のFormを開き、最後のFormにボタンを作ってメインフォームに戻し、他のすべてを閉じたいという問題です。私は、フォームの開口部にプログラムする方法他のフォームが開いているフォーム(C#)からメインフォームに戻り、他のフォームを閉じますか?

Here's:

Form2 popup= new Form2(); 
this.Hide(); 
popup.ShowDialog(); 
This.Show(); 

を私は他のフォームと同じでした、私はこのような何かやってみました:

Form1 main= new Form1(); 
this.Close(); 
main.Show(); 

をしかし、それはすべての葉他のフォームが開かれました。

ありがとうございます!

答えて

0

Application.OpenFormsを使用して、アプリケーションで開いているすべてのフォームのリストを取得できます。その後、それらをループして、必要のないものをすべて閉じることができます。このような何か:

foreach (Form f in Application.OpenForms) { 
    if (f.Name != this.Name) 
     f.Close(); 
} 
Form1 main= new Form1(); 
this.Close(); 
main.Show(); 

私は今、コードをテストする手段を持っていませんが、あなたはおそらくループ内のすべての他の人と現在のフォームを閉じることができますので、コードをに減らすことができます。

foreach (Form f in Application.OpenForms) { 
    f.Close(); 
} 
Form1 main= new Form1(); 
main.Show(); 
0

を非表示にするフォームには、この

Form1 f1 = new Form1(); 
f1.Show(); 
this.Hide(); 

this.Hide()を試してみてください。

+0

これがうまくいけば。 –

0

インスタンス化するすべてのフォームのコンストラクタを使用して、MainFormの参照を渡すことができます。

Form2 popup = new Form2(this); 
this.Hide(); 
popup.ShowDialog(); 

そして、あなたはどこにでもそれを呼び出すことができる参照して、あなたのForm2の

private Form _mainForm; 

// constructor of Form2 
public Form2(Form mainForm) 
{ 
    _mainForm = mainForm; 
} 

上のMainFormのグローバル参照を保持します。また、あなたは、この方法は、あなたは、単に表示する、新しいインスタンスを作成していないので、あなたがメインフォーム上の任意の事前定義された設定を失わないということです、あなたの三番目の形式にそれを行うための

this.Close(); 
_mainForm.Show(); 

利益を渡すことができます

関連する問題