2012-03-26 5 views
0

私はこの問題を長年解決しようとしています。 は、私は2つの形態があり、私の目的は次の通りである。Winforms:2つの不明なフォームを前面に表示

  1. ユーザーはForm2のを最小限にすると、Form1があまりにも最小限に抑えなければなりません。
  2. ユーザーがform2を最大化する場合、form1も最大化する必要があります。
  3. 両方のフォームが別のウィンドウで覆い隠され、ユーザーがタスクバーのform2アイコンをクリックすると、form1も前面に来る必要があります。

私がa_Resizeメソッドで解決した最初の2つのこと。しかし、私は3番目のことをすることはできません。私はactivateイベントで試してみましたが、私がそうすると、form2はブロックされたままです。私はForm2のをactivateイベントにハンドラを追加する場合

public partial class Form1 : Form 
{ 
    Form2 form2; 

    public Form1() 
    { 
     InitializeComponent(); 
     form2 = new Form2(); 
     form2.Show(); 
     form2.Resize += new EventHandler(a_Resize); 
    } 

    void a_Resize(object sender, EventArgs e) 
    { 
     if (((Form)sender).WindowState == FormWindowState.Minimized) 
     { 
      this.WindowState = FormWindowState.Minimized; 
     } 
     else 
     { 
      this.WindowState = FormWindowState.Normal; 
     } 
    } 
} 

form2.Activated += new EventHandler(form2_Activated); 

そして、Form2のをブロックし続けて(私はあまりにも他の方法を試してみました)インスタンスのフォーカスメソッドを呼び出し は、ここに私のコードですform1の後ろに。

void form2_Activated(object sender, EventArgs e) 
{ 
    this.Focus(); 
} 

どうすればいいですか?

+0

2つのフォームを同時に「アクティブ」にすることはできません。フォアグラウンドウィンドウは1つだけです。あなたは1つを選ぶ必要があります。あなたはどれが欲しいですか? –

+0

私は彼が両方をアクティブにしようとしているとは思わない。彼は 'form2'が起動されたときに' form1'もフォアグラウンドに持ち込まれるようにしたいと思っています(しかし 'form2'の後ろに)。 'form2'が' form1'を親として持つモーダルダイアログだった場合と似ています。 – ean5533

+0

@Thiago:* 'Focus()'の代わりに 'BringToFront()'を使うようにしてください。 – Tigran

答えて

4

form2を作成するときは、パラメータとしてthisShow()に渡すだけで、form1が所有者であることを示します。所有者のリンクでは、フォームは常に一緒に集められます(少なくとも私の経験では、私はこれについて私を裏付ける仕様を持っていません)。

public Form1() 
{ 
    InitializeComponent(); 
    form2 = new Form2(); 
    form2.Show(this);  //pass 'this' as argument to Show() to link them 
    form2.Resize += new EventHandler(a_Resize); 
} 
+0

それは働いた!ありがとうean5533! – Thiago

+0

これは正しいです。あるフォームが別のフォームによって所有されている場合、そのフォームは所有者フォームで閉じられたり隠されたりします(最小化を含む)。所有しているフォームはZオーダーの所有者フォームの背後に決して表示されません。 –

関連する問題