2016-07-29 10 views
-1

一度に1つのフォームを開こうとしています。 1つのフォームが既に開いているときに別のフォームを開こうとすると、開いてはいけません。フォームが既にcで開かれている場合にフォームを閉じる方法

私のコード:ここ

else if (instrument_name == "Micrometer") 
{ 
    this.Hide(); 
    Form2 f2 = new Form2(); 
    f2.ShowDialog(); 
    this.readclose() 
} 

このフォームは、フォーム2が開かれた後、既にオープンされていない場合のみ。

ソリューションは次のようになります。

Form fc = Application.OpenForms["UpdateWindow"]; 

if (fc != null) 
    fc.Close(); 

fm.Show(); 

が、私はこれを書くべきところ、私はこのForm1_Loadを置くならば、明らかにそれも初めてヌル含まれていますので、私は知りません。

これをプログラムファイルに入れる必要がありますか?

+0

検索を試しましたか?フォームへの参照を保持します。 – CodeCaster

+3

'ShowDialog'ブロック。 –

+0

申し訳ありません@ DanieAを詳しく教えてください。白 –

答えて

0

「フォームマネージャ」のようにsmthを作成すると、開いているすべてのフォームを監視できます。 フォームが閉じている状況では、マネージャーがフォームを開き、そうでなければフォームを再度開きます。

このソリューションはあなたと似ていますが、この場合はすべてのロジックが1か所に集中しており、理解しやすくメンテナンスも簡単です。

0

さまざまな方法で対応できます。しかし、その一つは、singletoneパターンを実装することです。あなたはForm2のは、()プライベートで見ることができるように

public partial class Form2 : Form 
{ 
    private static Form2 Instance; 
    private Form2() 
    { 
     InitializeComponent(); 
    } 

    public static Form2 GetForm2Instance() 
    { 
     if(Instance==null) Instance = new Form2(); 
     return Instance; 

    } 

    public static void CloseOldForm2AndOpenNewForm2() 
    { 
     if (Instance != null) Instance.Close(); 
     Instance = new Form2(); 
     Instance.Show(); 
    } 

    private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Instance = null; 
    } 
} 

:そのために、あなたのForm2に以下の方法を変更する必要があります。フォームを読み込むには、次のコードを使用する必要があります。

//Case 1 if you porefer to use existing instance of the Form2 
Form2 myForm = Form2.GetForm2Instance(); 
myForm.Show(); 


//Case 2 if you prefer to close old one and create a new Form2 
Form2.CloseOldForm2AndOpenNewForm2() 
+0

私の答えに何か応答があることはいいと思います。あなたの問題を解決しましたか?そうですね? – GenZiy

関連する問題