Windowsフォーム、.net 2.0別のフォームと同じzオーダーの新しいフォームを作成する
メインアプリケーションのスレッドは、フォーム(A)を持っています。私は、アクティビティが発生したことを判断するためにタイマーをオフにするバックグラウンドスレッドを持っています - それが起きると、メインアプリケーションフォームが非表示になり(BeginInvokeを使用して)、独自のスレッド(B)メッセージポンプ)。
2つのスレッドは複雑に聞こえますが、残念ながら必要です。
新しいメッセージポンプの新しいフォームは、最上位ではないフォームの上部に表示されます(期待どおりです)。しかし、元のアプリケーションがデスクトップの上にない場合、これは非常に面倒です。
元のフォーム(A)のzオーダーがどのようなものであるかを確認したいと思います。元のフォームのzオーダーをミラーリングして新しいフォーム(B)を作成します。
アイデア?
[これは、現在のユーザーのデスクトップ上にある場合(つまり、パスワードなしの場合)、フォームセーバーでポップアップするという副作用があります。これを解決できない場合は、これを避けたいのですが...]
2番目のフォームはそれ自身のスレッドです。私は何度も何度も開発者が自分のフォームを "マルチスレッド"する必要があると確信しています。私はそこには事例がないと言っているのではないが、ユーザーが誤ったアプローチをしていることが多い。 –
メインスレッドは、多くのフォーム、サブフォームなどを含む複雑なLOBアプリケーションです。第2のスレッドは、後で復元できる現在のダイアログボックスを含むすべてのフォームを非表示にしてメインアプリケーションを「ロック」するセキュリティプロシージャです。これらのフォームの一部は、当社の管理下にない第三者図書館によって作成されています。セキュリティ要件が設計の初めから存在していた場合は、2番目のアプリケーションポンプが必要ではないかもしれませんが、ロックがサードパーティのフォームなどを処理するのに十分な「汎用」であることを意味します。 –
ダイアログを表示しようとしましたか.ShowDialog(Me)または.ShowDialog(this)を使用して転送します。親への参照でShowDialogを使用すると、入力から親フォームがロックされ、フォーカスが許可されなくなります。 –