2009-03-23 4 views
3
これはだまされやすい人ですが、私はこれを見つけることができなかったか、最後の部分を明確にする方法場合

は、[バージョン情報]ダイアログこれについて考えるが、私はそれが他の場所(たとえば検索ボックス)に該当すると確信していますWinFormsの親フォームに関して最上位にすぎない非モーダルの最上位ダイアログをどのようにして作成しますか?

申し訳ありませんそれについては親の上にしかない。あなたはいつも親フォームの上にあるフォームを作成しますが、非モーダルですが他のアプリケーションをカバーしません。

答えて

9

あなたのダイアログを開くには、これを試してみてください:

FindDialog fd = new FindDialog(); 
fd.Show(this); 

キーは、ダイアログの所有者を割り当てることです。

+0

これは簡単なことでした。 – Davy8

0

あなたは何を意味するのかよく分かりません。 Form.ShowDialogは、アプリケーションがシングルスレッドでない限り、アプリケーションではなく、親に対してのみモーダルです。

のMainForm:

frmDialog1のにShowDialogをfrmDialog1を作成し、呼び出すスレッドを開始各々が 2つのボタン、

は、例えば、私は次のように構成された、これをテストするためのアプリを作りました。 frmDialog2を作成し、その上にShowDialogを呼び出す単一のボタン。

frmDialog2:(。すなわち、ブランク) は何もしません

彼らはすべてのI /ドラッグMainFormをにアクセスすることができました実行していました。ダイアログ2を表示しているボタンをクリックしていない場合に限り、frmDialog1(両方のバージョン)でも同じことができます。

+0

"Form.ShowDialogは、アプリケーションがシングルスレッドでない限り、アプリケーションではなく、親に対してのみモーダルです。"そうですが、私はそれを親に関して非モーダルにしたいと思いますが、私はそれを常に親の上に置いておきたいと思います。 – Davy8

+0

また、メインUIをブロックしないようにダイアログを表示するために新しいスレッドを開始することもできますが、手助けができれば手動スレッドを避けようとしています。私はダイアログの結果を必要としません。結局のところAboutダイアログだけなので、スレッドを開始することは過度のことです。 – Davy8

+0

あなたのアプリだから、私はあなたの知恵に遅れをとるでしょう。しかし、2つのライナーのスレッド=新しいスレッド(methodname); whatever.Start();過度に難しいことではありません。 –

関連する問題