- - PR -
VB6 での画面遷移方法について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-10 10:55
VB6 での画面遷移について、みなさんのご意見を伺いたいと思って、スレを立てました。
例えば、
というような構成のシステムがあったとします。 メニュー画面には、各一覧画面へ遷移するためのボタンが貼り付けてあります。 一覧画面では DataGrid や SPREAD 等で各テーブルのデータを一覧形式で表示します。 一覧画面でメンテ対象データを選択し、画面上にある「追加」「更新」「削除」ボタンを押すと、各メンテ画面に遷移します。 メンテ画面で、メンテナンスが正常終了すると、自動的に一覧画面に戻り、最新の状態を表示します。 このような仕組みのシステムの場合、通常、画面遷移ってどうやってやるものなのでしょうか? 私なんかは、メンテ画面から一覧画面に戻る際に最新の状態を表示する必要があるため、一覧画面の「Form_Load」で一覧に表示するようにしておき、 【一覧画面 → メンテ画面】 メンテ画面.Show Unload Me 【メンテ画面 → 一覧画面】 一覧画面.Show Unload Me なんてやってしまいます。 画面上、1画面しかユーザが触れないようにする必要があるため、Unload しています。 でも、毎回、Load & Unload するのは無駄なのかな、とも思ったり。 モーダルを使う方法が一般的だったりするんですかね。 | ||||||||||||
|
投稿日時: 2006-11-10 12:52
ログインとメニューは、本題とは関係ないのですね。
私は Hide するか、場合によってはオーナーフォームを使います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-10 13:25
いいえ。ログインもメニューも含めて、Show & Unload しています。 メニューからログインに戻ることは出来ない仕様ですけど。
「オーナーフォーム」を調べてみました。Show メソッドの第2引数が使えるんですね。 知らなかった・・・orz どちらの場合も一覧画面に戻る場合に、一覧画面情報の最新化が必要なわけですが、それは Activate でやる、という理解でよろしいんでしょうか? Load & Unload を繰り返すよりも、Hide & Show を繰り返した方が良い、という理解をしました。 | ||||||||||||
|
投稿日時: 2006-11-10 13:26
ふつうはhideでしょうねえ。毎回unload/loadは…。
オーナーフォームにするかどうかは、仕様によるでしょうね。 あと、機能がまとめてもいいものだったり数が少なかったりなら、1画面の中でペインを切り替えることも。 [ メッセージ編集済み 編集者: mio 編集日時 2006-11-10 13:27 ] | ||||||||||||
|
投稿日時: 2006-11-10 13:31
「一覧画面」と「メンテ画面」の2つのオブジェクトだけで画面遷移を制御しようとすると、泥縄式になると思います。この2つを管理する第三者のコントローラーを置いて、そいつが上記のような遷移を管理させるようにすると良いかもしれません。このコントローラーは実装によっては見えないフォームにする実装方法もあるかもしれませんし、あるいはフォームにしないほうが良いのかもしれません。 実装はさておき、「一覧画面」と「メンテ画面」の間の情報のやりとりは必要がなければ避けたいと考えます。 すなわち、 「一覧画面」←×→「メンテ画面」 「コントローラー」←○→「メンテ画面」 「コントローラー」←○→「一覧画面」 みたいな依存関係にしたほうが、仕様変更などにも強いと思います。 登場人物が多くて複雑ならば、「コントローラー」と「一覧画面」をひとつにまとめるというのも簡便化としてはアリかもしれません。
Load/Unload を伴なうようにするかどうかは、実装の好みにもよるのかもしれません。私としては、長くインスタンスを保持していると管理がややこしくなるので、画面に見えていないものはすぐに Unload してしまいたいほうです。 | ||||||||||||
|
投稿日時: 2006-11-10 13:51
>mioさん
普通は、Hide ですか(^_^;) Form_Load に処理が無いとしても、やっぱり Hide ですかね? 確かに、画面項目数が少なければ、画面切替って手もありますね。 私は、苦手ですけど(^_^;) >unibonさん おぉっ! 画面制御のプログラムを別個で用意しておくって手ですね。 Web 系のシステムでそんな制御をしているのを見たことがあります。 画面ID なんかを持ちまわって、「戻る」とかの異常遷移を制御するって方式でした。 でも、これの設計をするのが大変そうですね(^_^;) 私なんかも、コストが高くなければ、Unload してしまった方がスッキリするタイプです。 Activate で処理するのも何か違和感を感じてしまいます。 | ||||||||||||
|
投稿日時: 2006-11-10 16:12
いいえ。(Activate イベントで行うのは名前からして不適切ですよね?) モーダルの場合は、Show メソッドで制御が止まるので、その後に Refresh するメソッドを用意するとして、 モードレスの場合はイベントで通知するなどします。 最初のレスで、 > 私は Hide するか と書かせて頂きましたが、これは、 「次の Form へ遷移するとして、呼び出し元の Form をどうするか」 ということだと捉え、回答しています。 (誤解を招く書き方でした、ごめんなさい) 私は、呼び出し元は Unload はしませんが、呼び出し先の都合が終わったら、呼び出し先は Unload しますね。 [一覧] から [メンテナンス] へ遷移する時は、[一覧] は Hide。 [メンテナンス] から [一覧] に戻る時、[メンテナンス] は Unload。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-10 17:11
そうですよね。これは、納得です。
■Refresh するメソッドを用意する これは、分かります。でも、Show した後に Refresh って何か違和感があるんです。 VB が分かる人は、「あぁ、モーダルだから、Show した Form が閉じてから実行されるんだな」って分かると思いますが、VB が分からない人は困惑するんじゃないかな、と。 ■イベントで通知する これは、メンテ画面から一覧画面に戻る時に通知する、ってことですよね? これが出来ないとずっと思ってたので、メンテ画面に遷移する時に Hide ではなく、Unload を使っていました。 例えば、どんなイベントで通知するんでしょうか?
ここも了解しました。 |