2011-11-15 5 views
2

.netメソッドを呼び出すことができるメインアプリケーションがあります。私の.netメソッドは、モーダルフォームを示す新しいスレッドを開始します。現在のアプリケーションに関連するすべてのウィンドウを無効にする

今、私の.netメソッドは、モーダルフォームが表示されている間、メインアプリケーションからすべてのウィンドウを無効にする必要があります。

どうすればいいですか?

私はwin32メソッド "GetWindow"について考えていましたが、メインアプリケーションフォームのハンドルが必要です。

私の例では、モーダルダイアログでメソッドを呼び出すメインアプリケーションが表示されます。 threadingform-dlgが開いている状態でメインアプリケーションをクリックすると、threadingform-dlgが点滅するはずです。

main app with modal dialog

+1

最善の解決策は、.NETメソッドにそのウィンドウハンドルを渡すために、メインのアプリのためになります。それから推測はありません。 –

答えて

1
foreach (Form openedForm in Application.OpenForms) { 
    if (openedForm.GetType() == FormToClose) { 
     openedForm.Hide(); 
    } 
} 
+0

ok thats great。しかし、無効にされたmainformがクリックされた場合、どうやってthreadingformを "点滅"させるのですか? ? – wuhi

+0

@wuhi:あなたが 'ShowDialog'でスレッディングフォームを開くと、*点滅*が自動的に表示されます。 – Otiel

4

代わりShow()の形のShowDialog()機能を使用してください。これは自動的にフォームをモーダルにします。

他のすべてのウィンドウを無効にするか、呼び出し元のウィンドウのみを無効にするかは分かりません。

+0

実際に私はshowmodalを使っています。しかし、それは正確に私が望むものではありません。 メインアプリケーションのボタンをクリックすると、モーダルダイアログが閉じられた後に押されています。 : – wuhi

+0

フォームが別のスレッドから表示されているので、それは効果がありません。 – MusiGenesis

3

別のスレッドからモーダルフォームを表示しないでください(スレッドから非モーダルフォームを表示しないでください)。代わりに、アプリケーションのメインフォームからモーダルフォームを表示します。これでコードの一部を動かす必要がある場合は、そうしてください。

1

OpenFormsプロパティにアクセスすることで、アプリケーションのすべての開いているウィンドウを取得できます。

var forms = Application.OpenForms; 
関連する問題