フォームロードされているか判定するには?


紅茶花伝  2007-08-17 16:15:05  No: 137180

VB6.0で、Form1のcmdSearchを押下時に、
Form2の処理を呼び、処理が完了したらForm2をアンロードしたいのですが、

'Form1内処理
Private Sub cmdSearch_Click()
    Me.cmdSearch.Enabled = False
    From2.Show
    Unload From2
    Me.cmdSearch.Enabled = True
End Sub

'Form2内処理
Private Sub Form_Load()
    Call Process1
End Sub

Private Sub Process1()
    Debug.Print "処理されました"
End Sub


処理中はコマンドボタンのEnabledをFalseにしているにもかかわらず、
連打してしまうと、Form2の処理が呼ばれているように感じます。

処理が早すぎてそう見えるだけなのかもしれませんが・・・。

そこで、フォームがロードされていたら処理をしないという処理を行いたいのですが、
下手に判定すると、そこでロードイベントが走ってしまうような・・・。

アプリケーションの2重起動防止、
    If App.PrevInstance Then
        MsgBox "起動済"
        End
    End If

のようなことってフォームでも可能ですか?

よろしくお願いします。


KG  2007-08-17 18:22:20  No: 137181

Unload From2

のあとに

DoEvents

と入れてみてもだめですかね?


通ってみた  2007-08-17 18:40:16  No: 137182

>    From2.Show

これのせいとか?


特攻隊長まるるう  2007-08-17 19:07:03  No: 137183

まずは、
  Form2 が
  From2 な所から突っ込むべきでは?(^^;

次に
>Form2の処理を呼び、処理が完了したらForm2をアンロードしたい
>    From2.Show
モードレスなんだから、完了を待ってなんかいないのでは?

>処理中はコマンドボタンのEnabledをFalseにしているにもかかわらず、
処理中を待っていないで、ボタン押下の処理が終了するから関係ない。
…ボタンを押されたメッセージの処理は、PGが重い処理を実行してたときに
処理抜けが発生しないように、OSが覚えておいて(キューに溜めて)実行して
くれてるんだから、全く関係ない『期待された結果』に思います。

>処理が早すぎてそう見えるだけなのかもしれませんが・・・。
[VB6.0]
Private Declare Sub Sleep Lib "kernel32" (ByVal sec As Long)

Private Sub Form_Load()
    Call Process1
End Sub

Private Sub Process1()
    Sleep (1000)
    Debug.Print "処理されました" & Now
End Sub
…では、どうでしょうか?

設計から考え直すところだけど、Form2 がロードされていることを
フラグ代わりにして処理したいってことだよね?
Forms コレクションを使えば、アプリケーションにロードされているすべての
フォームを参照することができます。Name プロパティで検索してみるとか。

それ以前にモーダル表示にしてしまえばいいような気も。。。
もしくは、処理が終わったことを知るフラグをちゃんと用意するとか。


紅茶花伝  2007-08-19 13:46:38  No: 137184

返事が遅れてしまい、申し訳ございません。

KG様、通ってみた様、特攻隊長まるるう様、有難うございます。

特攻隊長まるるう様
>Form2 が
>From2 な所から突っ込むべきでは?(^^;
すみません。ここに記述する際にミスしてしまったようです。

Forms コレクションは、初めて知りました。

    For i = 0 To Forms.Count -1
        If Forms(i).Name = "Form2" Then
            Unload Forms(i)
        End If
    Next i

このような形で記述してみました。

>モードレスなんだから、完了を待ってなんかいないのでは?
>それ以前にモーダル表示にしてしまえばいいような気も。。。
確かに、よくよく考えれば、頭の中で「処理を待つ」と
当然のように決め付けていました。お恥ずかしい。

参考意見有難うございました。


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

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







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