- - PR -
VB.NETでMDIフォームの上でHideする際の不具合
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-12 22:28
初めて投稿します。
MDIフォームの上にMDI子フォームではないフォームを表示させ、 そのフォームをHideすると、消える際に一瞬MDIフォームの後ろの背景 (例えばエクスプローラー等開いていた場合など、その内容等) が表示されてしまいます。 @Closeした場合はこの現象は起こらない AMDI子フォームの場合はこのような現象は起こらない B切り替わる際にタスクバーのどこかをクリックすればこのような現象は起こらない CHideを指定せずに、Visible=Falseと記述しても同現象が起こってしまう。 ・・Bより、Hideした際にプロセスが切り替わってしまうのかと思い、 Hideした後、AppActivate(プロセスID)を指定してみたのですが、 なぜかエラー(5:ProcessID が見つかりません。)が起こってしまいます。 <ちなみにHideする直前・直後に取得したProcessIDをメッセージボックスで表示 させてみたのですが、ProcessIDは正常に取得できてました。また、Hideした後も タスクマネージャーのProvessIDは変化していませんでした。(当然)> 何か良い回避方法は無いものでしょうか? どなたか詳しい方、よろしくお願いします。 | ||||||||
|
投稿日時: 2004-02-13 02:45
諸農です。
同じような感じで作成して試しましたが、 同様の現象は発生しません。 背面のWindowが表示されるということは、 親フォームの再描画が追いついていないっていうか、 背面のWindowが先に描画されているって事ですね。。。 私が経験した内容で言えば、なんらかの重たい処理を 行っている時にブラウザをいくつも起動したら (よくSHIFT押しながらリンクをクリックするので) 起動中のブラウザの背面が透けてデスクトップのイメ ージが見えることがあります。
詳しくはないのですが、ビデオカードのドライバをアップデートするとか ビデオカードそのもの性能をアップする等が思い付きますが。。。 今試している環境はWin2000SP4 P4 1.6のメモリ1GBで、 ビデオカードはMatroxG550のメモリ64MBです。 たっとさんのところで現象が発生する環境はどんなものですか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-02-13 09:35
返信ありがとうございます。
処理に関してなのですが、 重い処理(HideしてからDBよりデータを抽出する)をしている場合も あるのですが、何も処理をせずにHideのみの場合も同現象が起こります。 また、重い処理の場合でも、タスクバーをクリックすると正常に描画されます。 あと、Closeの場合は正常に描画されます。 (現象的には「ブラウザの背面が透けて・・」と同じだと思うのですが・・) ※私の環境ですがノートPCです。 Win2000SP4 Pentium3 600Mzのメモリ256MBで、 ビデオカードはSilicon Motion Lynx3DMのメモリ4MBです。 更に詳しく現象を見たのですが、切り替わる際にHideされるフォームもバックの MDIフォームも透けた背景も全てタイトルバーがアクティブの色になってます。 切り替わる際にタスクバーをクリックするとMDIフォームのタイトルバーはアクティブ になりません。背景も透けないです。 ・・・切り替わるタイミングでタスクバーのアイコン(?)が一瞬ちらつくので、 このあたりがすごく気になっているのですが・・・ 後、書き忘れていましたのですが、MDIはEXEになってまして、Hideするフォームは DLLになっています。 この作り方もHideする場合には「問題有り」なのでしょうか・・・(汗 | ||||||||
|
投稿日時: 2004-02-13 11:33
解決しましたっ!
フォームを呼び出す時にShowDialog()を使用していたのですが、 その際に親フォームを取得しておき、 Hideする直前に「Me.Owner.Activate()」とする事で 現象は起こらなくなりました。 これがベストな解決方法かどうかはわかりませんが、 とりあえず落ち着きました。 ・・・大変お騒がせし、申し訳ございませんでした。 |
1