2011-01-18 7 views
2

メインフォーム(frmA)をブロックすることなくMdiChild(frmB)フォームからモーダルフォーム(frmD)を開き、他のすべてがMdiChildフォーム(frmC)を開く必要があります。次にfrmCに切り替えると、frmDは非表示になります。他のすべてのMdiChildFormsとMdiParentをブロックすることなく、MdiChildFormのShowDialogを使用できますか?

This is同様の質問ですが、Mdiアプリケーションではありません。

モーダルダイアログを開き、それを開いたmdiの子フォームのみをブロックする方法はありますか?

+1

あなたはリンクを見落としました。これを修正しました。 –

+0

ありがとうございました – referee

+1

'Show'メソッド(' ShowDialog'ではなく)を使用し、Pを使ってMDI子フォームの 'WS_DISABLED'スタイルフラグを設定すると何が問題になりましたか?/Invoke、[P Daddyの優れた答え](http://stackoverflow.com/questions/428494/is-it-possible-to-use-showdialog-without-blocking-all-forms/428782#428782)のように「類似の質問」? –

答えて

0

一つの可能​​な戦略は、モーダルダイアログを開くには、代わりに.ShowDialog().Show()方法を使用して、あなたが.Show()メソッドを呼び出す直前にfalseにのMDIChildのEnabledプロパティを設定することに依存していた、this articleに記載されています。

ダイアログが閉じるときにEnabledのMdiChildプロパティをtrueに戻す必要があります。つまり、ダイアログボックスのFormClosingイベントを処理するイベントハンドラをMdiChildフォームで作成する必要があります。

+1

子フォームの 'Enabled'プロパティをfalseに設定するだけで問題は、すべてのコントロールが無効な外観を取ることです(つまり、灰色で表示されます)。モーダルダイアログがWindowsでどのように動作するかを考慮すると、アプリケーションはユーザーに混乱することになります。しかし、私が既にコメントで示唆したより良い解決策があります。 [P Daddy's answer](http://stackoverflow.com/questions/428494/is-it-possible-to-use-showdialog-without-blocking-all-forms/428782#428782)を参照してください。 OP。 –

+0

あなたは有効なポイントを作っています.PP Daddyの回答は非常に包括的です。 – Jazza

関連する問題