フォームで最後に押されたボタンを判断するには?

解決


ウォーター  2006-11-08 20:11:37  No: 134013

VB6.0 + XPで開発しています。

フォーム1からフォーム2をモーダルで呼び出しているのですが、
フォーム2に[OK][キャンセル]ボタンがありどちらを押して閉じられた
かを判断したいのですが、どのように判断すればいいのでしょうか?

' フォームの表示
form.Show 1
' ここで判断したいです。

分かる方がいましたら押してください。
よろしくお願いします。


aki  2006-11-08 20:50:28  No: 134014

普通に考えれば  Module1.bas  に
Public form2_flag As Integer

フォーム2で
[OK]ボタンが押されたら         form2_flag = "OK"
[キャンセル]ボタンが押されたら form2_flag = "Cancel"
...とでもして  form.Show 1  されたら

if form2_flag = "OK" then
  'OK時の処理
Elseif form2_flag = "Cancel" then
  'キャンセル時の処理
end if

....ではダメでしょうか。


通ってみた  2006-11-08 20:58:58  No: 134015

私がよく使う方法としては、

1.Form1の方に非表示のラベル(今回の例ではLabel1)を置いておきます
2.Form2が閉じられる時に、Form1.Label1 = "OK"などとフラグを立てる
3.Form1でLabel1の中身を調べれば完了

よい方法なのかはわかりませんが、意外と便利だと思います


通ってみた  2006-11-08 21:00:28  No: 134016

ちょっと突っ込み・・・

>Public form2_flag As Integer
>form2_flag = "OK"

型が・・・


K.J.K.  2006-11-08 21:49:55  No: 134017

単純に、

'Form2側 ここから
Private miResult As VbMsgBoxResult

Public Function ShowModal(Optional Owner As Form) As VbMsgBoxResult
    Call Me.Show(vbModal, Owner)
    ShowModal = miResult
End Function

' OKボタン
Private Sub Command1_Click()
    miResult = vbOK
    Call Unload(Me)
End Sub

' キャンセルボタン
Private Sub Command2_Click()
    miResult = vbCancel
    Call Unload(Me)
End Sub

'Form2側 ここまで

'Form1側 ここから

    If vbOK = Form2.ShowModal(Me) Then
        ' ここでOK時の処理
    Else
        ' もしあればキャンセル時の処理
    End If 

'Form1側 ここまで

のようにするとか。
# Load/Unloadなどの管理は運用に即して決め直してください。


aki  2006-11-08 22:02:43  No: 134018

通ってみたさん、ありがとう。
そうですね、最初は1か0かの積もりが文字列に
してしまい、修正を忘れました。


ウォーター  2006-11-08 23:48:32  No: 134019

akiさん、通ってみたさん、K.J.K.さん
ありがとうございます。

みなさんの情報を参考にしたら、
思った通りの動作をさせることができました。

本当にありがとうございました。


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

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






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