- PR -

VB.NETでMDIフォームの上でHideする際の不具合

1
投稿者投稿内容
たっと
会議室デビュー日: 2004/02/12
投稿数: 3
投稿日時: 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は変化していませんでした。(当然)>

何か良い回避方法は無いものでしょうか?
どなたか詳しい方、よろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-13 02:45
諸農です。

引用:

MDIフォームの上にMDI子フォームではないフォームを表示させ、
そのフォームをHideすると、消える際に一瞬MDIフォームの後ろの背景
(例えばエクスプローラー等開いていた場合など、その内容等)
が表示されてしまいます。



同じような感じで作成して試しましたが、
同様の現象は発生しません。

背面の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/12
投稿数: 3
投稿日時: 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/12
投稿数: 3
投稿日時: 2004-02-13 11:33
解決しましたっ!

フォームを呼び出す時にShowDialog()を使用していたのですが、
その際に親フォームを取得しておき、
Hideする直前に「Me.Owner.Activate()」とする事で
現象は起こらなくなりました。

これがベストな解決方法かどうかはわかりませんが、
とりあえず落ち着きました。

・・・大変お騒がせし、申し訳ございませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)