2011-08-10 11 views
0

FormAFormBという2つのダイアログがあります。私はFormBを表示するために次のコードを使用します。コードはFormAから実行されるボタンクリックです。起動時にWinFormを完全に前面に出す方法

private void button_Click(object sender, EventArgs e) 
    { 
     FormB fB = new FormB(); 
     fB.Show(this); // FormA is the owner of FormB 
    } 

問題はFormBが画面上にFormAの上にあるときに、私はFormAをクリックした場合、それが起動しますが、前面に移動されていないということです。実際FormBあなたはなぜ知っていますか、そしてどのように所有者プロパティを削除せずに、この動作を変更するには?フォームA

Forms

の上に常にありますか

注:これは私の問題を単純化したものです。実際の問題では、FormAはWindowsのエクスプローラウィンドウであり、FormBは管理されたWinFormですが、動作は同じです。 IWin32WindowをShow()に渡さないと正常に動作しますが、Aを閉じるとBは閉じず、イベントに応答しません(entry参照)。

+0

あなたの本当の*問題は、あなたのダイアログがモーダルではないということです。まずそれを修正し、残りは後に続く。 –

+0

@ハンス:私はダイアログがモードレスであることを望んでいます。 –

答えて

2

所有者のプロパティを削除せずにこれを行うことはできません。

投稿者: オーナーフォームは所有者フォームの背後に決して表示されません。

出典:特定の問題についてはhttp://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx

は、なぜあなたはcloseイベントをリッスンしていないし、その後、明示的に独自のフォームを閉じますか?

0

TopMostプロパティをtrueに設定できます。

+0

あなたの子フォームは常に親フォームの上にあります。 TopMostでさえ。 – Skomski

+0

@Skomski:申し訳ありませんが、これはARZのためのものでした。削除されました。 –

0

ハックは、FormBのOnDeactivateメソッドにWindowState = FormWindowState.Minimizedを設定する(またはそれをオーバーライドする)ことです。

protected override void OnDeactivate(EventArgs e) 
    { 
     base.OnDeactivate(e); 
     this.WindowState = FormWindowState.Minimized; 
    } 

私はそれがあなたが望むものかどうかわかりません。

+0

しかし、Form2はForm1を超えていません。彼はForm1などを自動的に動かすこともできますが、それは彼が望むことではありません。 – Skomski

+0

これは彼が言ったことです - Form1は前もって持ち込まなければならないので、私が考えることができる唯一の方法は、与えられたシナリオでForm2を最小化することでした。また、私は私の答えの終わりに免責事項を置く:) –

関連する問題