- PR -

VB6 での画面遷移方法について

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-10 17:48
引用:

ひろれいさんの書き込み (2006-11-10 17:11) より:

■Refresh するメソッドを用意する
これは、分かります。でも、Show した後に Refresh って何か違和感があるんです。
VB が分かる人は、「あぁ、モーダルだから、Show した Form が閉じてから実行されるんだな」って分かると思いますが、VB が分からない人は困惑するんじゃないかな、と。


であれば、遷移先の Form に .NET Framework ばりな ShowDialog メソッドを実装しましょう。
戻り値は、当然 DialogResult 列挙体で実装して、OK なのかキャンセルなのか判別しましょう。

引用:

■イベントで通知する
これは、メンテ画面から一覧画面に戻る時に通知する、ってことですよね?
これが出来ないとずっと思ってたので、メンテ画面に遷移する時に Hide ではなく、Unload を使っていました。


先のレスの補足でも書きましたが、呼び出し元に戻る時は、Unload で良いです。

引用:

例えば、どんなイベントで通知するんでしょうか?


(説明下手なので、1 番簡単な例で説明します)
Unload すれば、Unload イベントが発生しますよね。
それを呼び出し元が検知できれば良いわけです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-11-13 09:15
引用:

じゃんぬねっとさんの書き込み (2006-11-10 17:48) より:

(説明下手なので、1 番簡単な例で説明します)
Unload すれば、Unload イベントが発生しますよね。
それを呼び出し元が検知できれば良いわけです。


個人的には、やっぱりココが引っかかってしまいます。

何かしらのイベント処理を記述するなら、Form_Load でいいような気がしてしまいます(^_^;)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-13 09:43
引用:

ひろれいさんの書き込み (2006-11-13 09:15) より:

個人的には、やっぱりココが引っかかってしまいます。
何かしらのイベント処理を記述するなら、Form_Load でいいような気がしてしまいます(^_^;)


呼び出し元のフォームが関知するのに、どうやって Form_Load イベントで書くというのでしょう?

> > [一覧] から [メンテナンス] へ遷移する時は、[一覧] は Hide。
> > [メンテナンス] から [一覧] に戻る時、[メンテナンス] は Unload。
> > それを呼び出し元が検知できれば良いわけです。

この状況では、そんな実装にする方が難しいと思われますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-11-13 09:56
引用:

じゃんぬねっとさんの書き込み (2006-11-13 09:43) より:

呼び出し元のフォームが関知するのに、どうやって Form_Load イベントで書くというのでしょう?

> > [一覧] から [メンテナンス] へ遷移する時は、[一覧] は Hide。
> > [メンテナンス] から [一覧] に戻る時、[メンテナンス] は Unload。
> > それを呼び出し元が検知できれば良いわけです。

この状況では、そんな実装にする方が難しいと思われますが...


言葉足らずでしたね。すいません。
私のように Show/Unload を繰り返す方法とじゃんぬさんのおっしゃる方法とでそれ程の差異が私には感じられなかった、ということです。
(ただし、フォーム表示のコストが高い場合は毎回Load は無駄かもしれません)

じゃんぬさん方法は、

1.呼び出し先.Show
2.呼び出し元.Hide

3.Unload 呼び出し先
4.呼び出し元が呼び出し先の Unload イベントを取得し、表示処理
5.呼び出し元.Show

という感じでしょうか。私の場合は、

1.呼び出し先.Show
2.Unload 呼び出し元

3.呼び出し元.Show
4.Unload 呼び出し先

となります。

で、じゃんぬさん方式の「4.」で画面編集処理を行なうのであれば、私の方式の「3.」で Show メソッド実行時に、Form_Load で処理してしまってもそう大差はないのかな、と感じています。

画面 Load 時のコストによるとは思いますけど。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-13 11:13
引用:

ひろれいさんの書き込み (2006-11-13 09:56) より:

で、じゃんぬさん方式の「4.」で画面編集処理を行なうのであれば、私の方式の「3.」で Show メソッド実行時に、Form_Load で処理してしまってもそう大差はないのかな、と感じています。


概念上は大きく変わると思いますが、利点を見出せないのであれば致し方ないでしょう。
以下の文は、あくまで私見ですので放置でも良いです。

遷移において、[戻る] という行為は、初期化の対象になりません。
この無意味な Load イベントは、保守性を下げる要因のひとつだと思います。

たとえば、初回実行時のみ何かをする仕様が加わった場合、どうやって制御しますか?

概念を守るのは、保守性を上げる有効な手段です。
仕様変更による対応の柔軟さと、引き継ぎなどによる保守性に関わります。

また、「Load イベントが発生するように 'している' から Load イベントが発生する」 は間違いです。
これでは、「Call Command1_Click」 などという、イベントの概念を無視したコードと大差がないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-11-13 12:59
引用:

じゃんぬねっとさんの書き込み (2006-11-13 11:13) より:

概念上は大きく変わると思いますが、利点を見出せないのであれば致し方ないでしょう。
以下の文は、あくまで私見ですので放置でも良いです。

遷移において、[戻る] という行為は、初期化の対象になりません。
この無意味な Load イベントは、保守性を下げる要因のひとつだと思います。

たとえば、初回実行時のみ何かをする仕様が加わった場合、どうやって制御しますか?

概念を守るのは、保守性を上げる有効な手段です。
仕様変更による対応の柔軟さと、引き継ぎなどによる保守性に関わります。

また、「Load イベントが発生するように 'している' から Load イベントが発生する」 は間違いです。
これでは、「Call Command1_Click」 などという、イベントの概念を無視したコードと大差がないです。


おっしゃりたい事が分かりました。
確かに、保守性を考えると Load 処理と画面編集処理を分ける意味合いがありますね。

>これでは、「Call Command1_Click」 などという、イベントの概念を無視したコードと大差がないです。

耳が痛いお言葉です(^_^;)
自分の見てきた範囲のソースしか理解の幅が無いため、このような問題に気付かないことがあるので、大変勉強になります。
ありがとうございました。

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