- - PR -
画面終了後に戻る画面がちらつきます。抑止できますか?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-15 11:57
こんにちは。いつもお世話になってます。
以下の内容についてご教授頂きたく投稿させて頂きます。 解決策をご存知の方は方法を教えて下さい。 ------------------- VB.NET2003 ------------------- <内容> A.dll内にある画面(メニュー)からB.dllにある画面(Sub処理)を呼出し B.dllの画面(Sub処理)を終了してA.dllの画面(メニュー)に戻るときに A.dllの画面(メニュー)がちらつきます。 この「ちらつき」を抑止する方法はありますか? <現在のコーディング内容> A.dllの画面(メニュー)からB.dllの画面(Sub処理)を表示するときは Frm.ShowDialog()で表示し、終了するときはB.dll画面内の終了処理に Me.Close() Me.Dispose() と書いて終了しております。これだけではだめなのでしょうか? 初心者的な内容で申し訳ありませんがご教授の程、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-12-15 12:19
普通はそれだけで十分です。したがって画面がちらついて見える原因は他にあると思います。メニュー画面に配置しているコントロールは何ですか?Activateイベントなど、フォームが入れ替わったときに実行される処理に何を記述していますか? | ||||||||||||
|
投稿日時: 2005-12-15 12:26
B によって隠された領域にある A 側のコントロール数が多いのでしょう。 基本的には画面設計を見直すしかないです。
Dispose は呼び出し側のお仕事じゃなかったかな?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-12-15 12:35
ダイアログ?と閉じるときに、
メニューのあるフォームを Activate したらどうなりますか? | ||||||||||||
|
投稿日時: 2005-12-15 12:42
ダイアログから呼び出し元を参照するには、Owner プロパティ。
ShowDialog のときに、owner を指定できますので、 そこで呼び出し元(メニューフォーム自身)に指定。 ダイアログを閉じるときに、 Me.Owner.Activate() 'Owner = メインメニューフォームのはず としてメインメニューをアクティブにする。 多分、これのことじゃないかと思います。 | ||||||||||||
|
投稿日時: 2005-12-15 13:15
結局、描画で手間取っているので、Closing などで Active にしてもムダですよね。 端末の構成によっては気にならないので、導入先の端末を見直すか、 おそらく重いであろう、A 側の画面設計の見直しになると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-12-15 13:59
一般的なちらつきとは別という点で言うと 私も先日、閉じたら親画面がカメラのようにフラッシュするという現象がありました。 そのときの解決策というか失敗はきちんとOwnerが引き渡されていなかったということだったと記憶しています。 どう直したかというと、例えばControlを指定していたものをControl.FindFormにしたとか、そういうことだったような。。。 この現象であれば、Owner引数に親「フォーム」のIWin32Windowが指定されているか確認してみてください。 [ メッセージ編集済み 編集者: まどか 編集日時 2005-12-15 14:11 ] | ||||||||||||
|
投稿日時: 2005-12-15 14:08
甕星さん、じゃんぬねっとさん、masaさん ご教授ありがとうございました。
甕星さんの仰るように私のPCはPenVの866でメモリは512に上げてはいるのですが 開発するにはスペックが低いのでその影響もあるかと思われます。すいません。。 また、A.dllの画面(メニュー)のActivatedイベントには「Me.Refresh()」と 記述してます。あまり意味が無いのでしょうか? じゃんぬねっとさんの仰るようにDisposeはアプリケーション間でオブジェクトを 共有できるようにしている側でのリソース開放となっておりましたので、その 意味からいくと、A.dll側の画面(呼出元メニュー)でDisposeをかけるのが正解と 理解しました。 samaさんの手法も今から実行してみたいと思います。 皆さん、本当にありがとうございました。助かりました。 |