[リストへもどる]
一括表示

投稿時間:2003/08/02(Sat) 09:55
投稿者名:みつお
Eメール:
URL :
タイトル:
画面の処理について
いつもお世話になります。
また教えていただきたいことがあり、書き込ませていただきます。

Aという画面からBという画面を呼び出します。
このときAの画面の情報を持っておきたいので、
B.Show
Me.Hide
としています。
BのForm_Loadでエラーが起こったとき、Bの画面を表示させずに
Aの画面に戻りたいのですが、なぜかBの画面が表示されて、Aの
画面が消えてしまいます。
ちなみにBのForm_Loadではエラーが起こったとき、
A.Show
Exit Sub
としています。

どなたかおわかりの方がいらっしゃれば教えていただきたく思います。
すみませんがよろしくお願いいたします。

投稿時間:2003/08/02(Sat) 12:10
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 画面の処理について
Me.Hide より A.Show が先に実行されているからです。

(たとえば、Formを2つ用意し、
Form1にTextBoxをひとつ置いておきます。

Form1は
Private Sub Form_Load()
    Form2.Show
    Form1.Text1.Text = Form1.Text1.Text & 1
End Sub

Form2は
Private Sub Form_Load()
    Form1.Text1.Text = Form1.Text1.Text & 2
End Sub

として実行してみてください。
どちらが先に実行されているかわかります。)

対策としては、
A側ではB.Showだけして、
BのForm_LoadでエラーがなければA.Hideしてはどうでしょう?

投稿時間:2003/08/02(Sat) 13:01
投稿者名:みつお
Eメール:
URL :
タイトル:
Re^2: 画面の処理について
Sayさん、ありがとうございます。

> Me.Hide より A.Show が先に実行されているからです。

教えていただいたとおりやってみたらわかりました。
ありがとうございます。

>
> 対策としては、
> A側ではB.Showだけして、
> BのForm_LoadでエラーがなければA.Hideしてはどうでしょう?

BのForm_Loadで全ての処理が正常に終わった後、A.Hideをしたところ
エラーの時、Aの画面が出るようになりました。
が、Bの画面も残ってしまいます。
ちなみにエラーの時にBのForm_LoadでUnload Meとしても、Form_Loadが
終わっていないため、"既にUnloadされています"というエラーが出てしまいます。
BのForm_Loadでエラーが出た場合、どうすればBの画面が消えるようになるのでしょうか?

投稿時間:2003/08/02(Sat) 16:48
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: 画面の処理について
> ちなみにエラーの時にBのForm_LoadでUnload Meとしても、Form_Loadが
> 終わっていないため、"既にUnloadされています"というエラーが出てしまいます。
> BのForm_Loadでエラーが出た場合、どうすればBの画面が消えるようになるのでしょうか?

基本的な対策として、ShowとLoadを一緒にしないことです。

やり方は幾らでもありますが、例えば
 BフォームにPublic変数としてbLoadErr(Boolean型)を用意する。
 まずLoad BとしてBフォームをロードします。
 Form_Load中にエラーがあったらbLoadErrをTrueにする。
 B.bLoadErrがTrueならUnload B。
 FalseならB.Show。
とか。

投稿時間:2003/08/03(Sun) 11:35
投稿者名:みつお
Eメール:
URL :
タイトル:
Re^4: 画面の処理について

> やり方は幾らでもありますが、例えば
>  BフォームにPublic変数としてbLoadErr(Boolean型)を用意する。
>  まずLoad BとしてBフォームをロードします。
>  Form_Load中にエラーがあったらbLoadErrをTrueにする。
>  B.bLoadErrがTrueならUnload B。
>  FalseならB.Show。
> とか。

nanashiさん、ありがとうございます。
教えていただいた方法で、思い通りの処理となりました。
でも、こういう方法、自分ではなかなか思いつかないんです。
やはり、プログラム慣れというものが必要なんですかね。
みなさん、いろいろと教えていただいて本当に感謝しています。