2011-12-15 11 views
1

この質問は簡単なことかもしれないが、私は私が探している答えを見つけることができません。 私はLogin_FormとMain_Formを持っています。 Main_Formにログインすると、私はそれを表示させ、私はLogin_Formを閉じたくないので起動します。 私の質問は、Main_Formから同時に両方のフォームを閉じる方法はありますか? this.Close();は、現在のフォームのみを閉じます。フォームを閉じる簡単な方法

if (access) 
{ 
    Main_Form mainForm = new Main_Form(); 
    mainForm.Visible = true; 
    mainForm.Activate(); 
} 

ここで私はmain_formをインスタンス化します。login_formへの参照をどのように渡すことができますか? 前もってありがとう、私はMain_Formから閉じるまでLogin_Formを開いたままにしておかなければならないことを覚えておいてください!私はすべてのフォームを閉じApplication.Close()方法を知った使用することになり、あなたの答えのどちらを見た後

フィードバック

。みんなに感謝の気持ちを伝える前にこれについて教えてください。

+0

Main_FormがLogin_Formのメンバ変数ですか?オブジェクトグラフの設計については、さらに詳細が必要です。 –

答えて

3

としてログインフォームのインスタンスを受け入れるようにMain_Formのコンストラクタを変更する必要があります。あなたはどのようにそれをするのかはあなた次第です。

  • 参照フォームを表示するときに、ログインフォームのFROMから参照先をメインに渡すことができます。
  • ログインフォームのグローバル参照を保持することができます。ただでログインフォームを渡す代わりに、コードを使用することができ、あなたのアクティブ()メソッドで

    public class MainForm : Form 
    { 
        Form loginform; 
        public MainForm(Form loginForm) 
        { 
         this.loginForm = loginForm; 
        } 
    
        public void CloseForms() 
        { 
         loginForm.Close(); 
         this.Close(); 
        } 
    } 
    

  • ます。たとえば、

の考えることができる他の方法を(singletonに思います)上記のようにして、Active()メソッドの代わりにthisをコンストラクタに渡すだけです。

public class MainForm : Form 
{ 
    Form loginform; 
    public Active(Form loginForm) 
    { 
     this.loginForm = loginForm; 
    } 

    public void CloseForms() 
    { 
     loginForm.Close(); 
     this.Close(); 
    } 
} 

//from the LOGIN form 
if (access) 
    { 
     Main_Form mainForm = new Main_Form(); 
     mainForm.Visible = true; 
     mainForm.Activate(this); //this is a reference to the current form. LOGIN in this case 

    } 
+0

私はこのアプローチが好きです。私は、main_formへの参照をどのように渡すのか分かりませんので、いくつかのコードラインで質問を更新します。 – phadaphunk

+0

Form/Controlのコンストラクタを介してパラメータを渡さないようにしてください。そうしないと、デザイナが台無しになります。代わりにプロパティを使用します。 – surfen

+0

完璧に動作しますありがとうございました! – phadaphunk

1

ログインフォームへの参照がある場合は、そのフォームのCloseに電話してください。

Login_Form.Close() 

あなたは自分のメインフォームは、あなたがそれに近いメソッドを呼び出すことができますログインフォームへの参照を持っている場合は、パラメータ

+0

私はこのアプローチが好きです。私は、main_formへの参照をどのように渡すのか分かりませんので、いくつかのコード行で私の質問を更新します。 – phadaphunk

1

また、AddOwnedFormメソッドを使用することもできます。リンク上から

フォームが別のフォームによって所有されている場合、それは 所有者形で閉鎖又は隠されます。たとえば、Form1という名前のフォーム によって所有されているForm2という名前のフォームを考えます。 Form1が閉じられているか最小化されている場合、Form2は も閉じています。所有しているフォームは、 オーナーフォームの背後に表示されることもありません。 findと などの所有フォームを使用すると、所有者フォームが選択されたときに所有者フォーム の後ろに表示すべきでないウィンドウを置き換えることができます。

コード:

Form loginForm = new Form(); 
this.AddOwnedForm(loginForm); 
loginForm.Show(); 

編集:あなたがメインフォームを閉じる場合

Form mainForm = new Form(); 
mainForm.Visible = true; 
mainForm.AddOwnedForm(this); 
mainForm.Activate(); 

今では両方のフォームを閉じます。

+0

ooohその方法について知らなかったし、それはより簡単な方法になります!どうもありがとう ! – phadaphunk

+0

しかし、このLoginFormが 'Application.Run(新しいLogin_Form())でのProgram.csによって呼び出される私のデフォルトのフォームであればどのようなマーク;' このフォームは名前なしなしインスタンス化されますか? フォームにAddOwnedフォームを作成するにはどうすればよいですか? – phadaphunk

+0

Login_Formは親フォームであり、メインフォームを作成している場合は、フォーム名の代わりにこれを使用してmainFormに割り当てます。上記の編集を参照してください。 –

1

あなただけApplication.Exit();を使用することができませんApplication.Close();