ロード時にエラーが発生した場合、閉じるには?

解決


ビター  2003-06-02 03:53:04  No: 107356

VisualBasic6.0を使用している初心者です。
フォームをShowで開いた後、そのフォームのロード時にエラーが発生
したので、ロードのところにエラー回避を入れ、Unlaod Meを追加した
のですが、"既にアンロードされています"と、またエラーメッセージが
でます。ロード時にエラーが発生した場合、そのShowで開いたフォームを
閉じるにはどうしたら良いのでしょうか?どうかお教え下さい。

Private Sub Command1_Click()
Form1.Show
End Sub

(Form1)
Private Sub Form_Load()

On Error Goto ERROR1

   C = 1 / 0

On Error GoTo 0
Exit Sub
ERROR1:

    Unload Me

End Sub


たかみちえ  URL  2003-06-02 06:46:26  No: 107357

アンロードされているというのなら、もうアンロードされてるんじゃないですか?
  いや、試したわけじゃないし、最近VBにはご無沙汰なので、よくわかりませんけど。

  Delphiという言語では、クラスのコンストラクタ(オブジェクトを生成するために呼び出すメソッド)でエラーが起こった場合、
自動的のそのオブジェクトは開放されます。
  そんな感じで。

  ほんとは、ちゃんとしたチェッカなり何なりで、調べないといけないのかもしれませんけどね。


nanashi  2003-06-02 19:01:53  No: 107358

基本的に、Showでフォームをロードするのはオススメ出来ません。
そもそもロード時にフォームを開くかどうかをチェックするのではなく
チェックしてからフォームを開くようにした方が良いです。

Private Sub Command1_Click()
    Load Form1
End Sub

(Form1)
Private Sub Form_Load()

On Error Goto ERROR1

    C = 1 / 0

On Error GoTo 0

    Me.Show
    Exit Sub

ERROR1:

    Unload Me

End Sub


nanashi  2003-06-02 19:07:51  No: 107359

あー、チェックするの忘れてた。
今試したらダメだったんで、上の投稿は忘れてください(汗)

MSDNによると、
>そのフォーム自身の Form_Load プロシージャ内で
>Unload ステートメントでアンロードされるフォームが、
>暗黙のうちにロードされました。
>たとえば、Form2 がまだロードされていないときに 
>Form2.BackColor = Form1.BackColor といったコードを記述すると
>フォームが暗黙のうちにロードされます。
>
>Form_Load プロシージャから Unload ステートメントを削除してください。

だそうです。


ビター  2003-06-05 21:11:04  No: 107360

みなさん、ご返事ありがとうございます。
いろいろ試して、結局Form_Load プロシージャ内のソースを
Showの前に書き、エラー回避しとくのが一番いいみたいですね。
ただ、もうひとつお聞きしたいのですが、例えばForm1を現在開いているか
どうか、わかる方法ってないのでしょか?
これがわかれば、エラー回避後、IF構文が使えるのですが?
わがまま言って、すみません。`-`;


nanashi  2003-06-05 21:48:48  No: 107361

Formsコレクションを調べれば良いんじゃないかな?

    Dim frm As Form
    
    For Each frm In Forms
        If frm.Name = "Form1" Then
            'なんかの処理
        End If
    Next


GOD  2003-06-05 23:27:58  No: 107362

たとえばこんなのでいいのかな?

Private Sub Command1_Click()
    Form1.ShowOpen
End Sub

(Form1)
Private OpenFlag As Boolean

Private Sub Form_Load()
On Error GoTo ERROR1
    Dim c As Integer

    c = 1 / 0

On Error GoTo 0
    OpenFlag = True
    Exit Sub
ERROR1:
    OpenFlag = False
End Sub

Public Function ShowOpen() As Boolean
    Load Me
    If OpenFlag Then
        Me.Show
    Else
        Unload Me
    End If
    ShowOpen = OpenFlag
End Function


ビター  2003-06-06 05:02:31  No: 107363

またもや、みなさんありがとうございました。
無事、解決しました。本当にお世話になりました。
ソースを下記の通りです。

Private Sub Command1_Click()

On Error Goto ERROR1
    
   Form1.Show

On Error GoTo 0
Exit Sub
ERROR1:

MsgBox Err.Description, vbExclamation

End Sub

(Form1)
Private Sub Form_Load()

    Dim c As Integer
    Dim frm As Form

On Error Goto ERROR2

    C = 1 / 0

On Error GoTo 0
Exit Sub
ERROR2:

    For Each frm In Forms
        If frm.Name = "Form1" Then
           Unload Form1
        End If
    Next

End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加