2011-07-12 20 views
2

私のプロジェクトがForm1の読み込みを開始し、サーバーとのプログラムライセンスを確認したら、OKであればForm2を表示し、Form1を閉じます。その後、ユーザーがForm2を "x"で閉じると、プログラムは終了するはずです。C#、フォームを非表示にして別のフォームを表示する方法

あなたはそれを行う最善の方法とは何でしょうか?これまでのところだけform2.Showになった

:)

... 
if (responseFromServer == "OK") 
{ 
    Form2 form2 = new Form2(); 
    form2.Show(); 
} 

ありがとう!

+0

あなたはスプラッシュスクリーンを作成しようとしていますか? –

+0

のように、プログラムが購入された場合はサーバーとチェックし、ランチャーはForm2を消して消えます。 – Roger

+0

Form1のLoadイベントに投稿したコードはありますか? – DoctorMick

答えて

4

であること、(アプリケーションを閉じますそれはより高度です)。

一つの選択肢メインフォームとしてForm2の作成から始めますが、隠されたそれを維持、そして、Form1を作成して表示し、その後、ライセンスチェックが終了し、近くのForm1とForm2のが見えるようにすることです。

それとも、Form1を示すことによって開始し、ライセンスチェックが行われたときに、Form1.Hide()を呼び出し、その後、Form2のを作成して表示することができます。 Form2のがユーザによって閉じられたときに続いて、Form2.ClosedイベントハンドラでForm1.Close()を呼び出す:

class Form1 
{ 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     // do the license check, 
     // and then when the license check is done: 
     if (responseFromServer == "OK") 
     { 
      Form2 form2 = new Form2(); 
      Form2.FormClosed += new FormClosedEventHandler(Form2_FormClosed); 
      Form2.Show(); 
      this.Hide(); 
     } 
     else 
      this.Close(); 
    } 


    private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     this.Close(); // will exit the application  
    } 
} 
1

、Form1を非表示にするには、これを試してみてください:

this.Hide(); 

、その後のForm2のあなたのFormClosingイベントに:

Form2_FormClosing(object sender, EventArgs e) 
{ 
    Application.Exit(); 
} 
+0

が試行されましたが、何もしていないようです。 – Roger

+1

フォームを再度表示する必要がない場合は、これが最良の方法です。 – DoctorMick

+0

>>>アプリケーション。出口(); これはアプリ全体を強制終了するために機能します。ありがとう! – Roger

1

この

//Form1 code 
if (responseFromServer == "OK") 
{ 
this.Hide(); 
Form2 frm = new Form2(); 
frm.Show(); 
} 

を試してみて、あなたがアプリケーションを使用してアプリケーションを終了することができますForm2のフォームを閉じるイベントで.Exit()メソッド

4

私はこのようなものを使用します。あなたはアプリが起動する方法をカスタマイズしない限り、あなたはおそらく、あなたのメインフォームとしてForm1]を使用している場合、あなたはこのようにそれを閉じることはできません知っているようにコードがのProgram.cs

public static bool IsLogged = false; 

Application.Run(new FUserLogin()); 
if (!isLogged) 
    Application.Exit(); 
else 
Application.Run(new FMain()); 
+0

私はForm1上のプロパティで静的なものを置き換えることもできますが、私はそれもやっていると思いますが、それは私だけです。 – DoctorMick

+0

@DoctorMickあなたが正しいです。 –

3

あなたは、フォームが閉じるまでブロックしますShowDialogメソッドを使用して、最初のフォームを表示することができます。 Form1の内部では、処理が完了したらthis.Close()を呼び出すだけで、DialogResultプロパティを設定するか、Form1が閉じる前に設定したパブリックプロパティを作成して呼び出し元にチェックさせることができます(おそらくはクリーナー)。次にMainから直接戻るか、新しいクラスをインスタンス化してApplication.Run()に渡します。あなたはForm1のからのForm2を参照されていないため、

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
    var form1 = new Form1(); 
    var result = from1.ShowDialog(); // Form1 can set DialogResult, or another property to indicate success 

    if (result != DialogResult.OK) return; // either this 
    if (!form1.ValidationSuccessful) return; // or this 

    Application.Run(new Form2()); 
    } 
} 

私は、Form1を表示し、アプリケーションを終了するに対処するためのすべてのコードが一箇所に集約され、かつ簡単に開発やテストのためにコメントアウトすることができ、これが好き。

+0

ニース。私はForm.ShowDialog()が独自のメッセージループを作成したことを認識しませんでした。カッコいい。 +1 –

1
//Login Form Load Events or Constructor 
this.Close(); //first Close Login From    
Application.Run(new Main());//second Run Main Form