2017-06-23 8 views
-1

私は素晴らしいソリューションを見つけましたが、アプリの起動時に動作するように書かれています。それは動作しますが、メインフォームをアクティブにすることも可能になり、今度は2つのフォームを必要なだけ何度でも開くことができます。それは望ましい機能ではありません。 2つのフォームがアクティブな間にメインフォームをロックするにはどうすればよいですか?もう一つは、フォームを閉じるためにESCキーを追加しました。フォームが別々に開かれたとき、ESCは機能しました。同時に、ESCを一日中同時に押すことができ、何もしません。同時に2つのフォームを開く

public class MultiFormContext : ApplicationContext 
{ 
    private int openForms; 
    public MultiFormContext(params Form[] forms) 
    { 
     openForms = forms.Length; 

     foreach (var form in forms) 
     { 
      form.FormClosed += (s, args) => 
      { 
       //When we have closed the last of the "starting" forms, 
       //end the program. 
       if (Interlocked.Decrement(ref openForms) == 0) 
        ExitThread(); 
      }; 

      form.Show(); 
     } 
    } 
} 

そして、私はこのようにメインフォームから二つの形式を作成します:

以下は、私が使用したコードは、事前に助けを

private void simpleButton1_Click(object sender, EventArgs e) 
    { 
     Cursor = Cursors.WaitCursor; 
     using (new MultiFormContext(new fmUgyek(), new fmNaptar())) 
     Cursor = Cursors.Default; 
    } 

ありがとう!

答えて

1

あなたはこのような何かを試みることができる:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 frm2 = new Form2(); 
    Form3 frm3 = null; 

    frm2.Shown += (s, args) => 
    { 
     frm3 = new Form3(); 
     frm3.Show(); 
    }; 

    frm2.FormClosing += (s, args) => 
    { 
     frm3.Close(); 
    }; 

    frm2.ShowDialog(this); 
} 

Form2を選択し得ることからForm1を防ぐことができますどのShowDialogを使用して示されています。 Form2が表示されている場合は、ShownイベントにForm3と表示されます。 Form2が閉じている場合は、Form3も閉じます。