dポイントプレゼントキャンペーン実施中!

【VB.NET】別Formのボタンが押されるまで待機する方法??

 今晩は,いつもいつも勉強させていただいております.
質問させていたきます.どうぞよろしくお願いいたします.
 開発環境XP+VB2008になります。

 今までは、コード中のMsgBoxで続行か中断かを選択するために
 Private Sub Button1_Click
       :
       :
       :
   If MsgBox("続行しますか?", MsgBoxStyle.OkCancel, "確認") = vbOK Then
   Else
     Exit Sub
   End If
       :
       :
       :
 End Sub
   
としておりましたが、このMsgBox上に複数のコントロールが必要になって
しまいましたので、同じ形のFormを作成いたしました。
(Form_MsgBox上に、ButtonOK、ButtonCancel、Label1に加え
                     TextBox1を配置)

 Form_MsgBox.LabelMsg.Text = "確認"
 Form_MsgBox.Show()

が、このメッセージ表示中だけPrivate Sub Button1_Clickを
止めておく方法がわかりません。。。
ButtonOKかButtonCancelが押されるまで待機したいのですが。。
 検索いたしておりますと、何か他のアプリを起動した場合に
それが終わるまで待機する、といった方法は結構見つかるのですが。。。

 何か良さそうな方法など思いつかれるようでございましたら、
是非ともアドバイスいただきたくお願い申し上げます。
 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

A 回答 (3件)

Form_MsgBoxを ShowDialogで表示してやるってのはダメなんですか?



親FormのButton1を押した際に 親Form内の他のコントロールを操作したいのですとこの手法は使えませんが ・・・
    • good
    • 1
この回答へのお礼

 どうもありがとうございます!
うまくいきそうでございます^^
一つだけ、Form_MsgBox起動時に、その上にあるLabel1.Textが
変わってくれません。。。orz

 Form_MsgBox.Label1.Text = "確認"
      '↑この行が機能してくれておりません。。
 Dim f As New Form_MsgBox
 If f.ShowDialog(Me) = DialogResult.OK Then
 Else
  Exit Sub
 End If

といたしましたところ、すべてうまく動作してくれるのでございますが、
Label1.Textだけデフォルトのまま変わってくれません。色々と試しておりますが。。
できればタイトルだけ変えて使い回したいのでございますが。。

 もし何かご指摘いただけるようなことなどございましたら、
是非ともアドバイスいただきたくお願い申し上げますm(_ _)m

お礼日時:2010/01/10 09:27

Formのインスタンスを生成してから Label1.Textを変更しましょう



' ここではなく
'Form_MsgBox.Label1.Text = "確認"
'↑この行が機能してくれておりません。。
Dim f As New Form_MsgBox
' ここで インスタンス経由で設定
f.Label1.Text = "確認"
If f.ShowDialog(Me) = DialogResult.OK Then
Else
  Exit Sub
End If
といった具合で ・・・

この回答への補足

(お礼後の補足になります。)

 しつこくどうも申し訳ございません^^;
「ベストアンサー」ですが、後からご覧になった方々が
分かりやすいように、 ShowDialogをご紹介いただけた
回答No.2に付けさせていただきます。
 この度は誠にありがとうございました! m(_ _)m

補足日時:2010/01/10 21:39
    • good
    • 0
この回答へのお礼

 どうもありがとうございます!
助かりました^^

 今いろいろと動作確認いたしておりますが、
この方法だと他のフォームへのFormMouseDownが
取れないようでございますねー。。。
ずっと検索いたしておりますが解決策が見つかりませんorz
(タイトルの件はアドバイスいただけたお陰ですべて解決できましたので
本質問は解決済みとさせていただきますm(_ _)m )

 ご助言いただけたお陰でまたできることの幅が広がりました^^
 この度はご閲覧・アドバイスいただきまして
誠にありがとうございました!!

お礼日時:2010/01/10 21:36

Form_MsgBoxにメンバ変数をひとつ設定して


それをチェックしに行く、アクセス関数を設けてはどうでしょうか。

押されていない間、Do ~Loopステートメントで待ち続ける。

Form_MsgBox側では、どのボタンが押されたかを格納する変数を用意しておきます。

考え方としては、これでいけるのかな。と思います。

注意しなければならないのは
メンバ変数の初期化です。
これを怠ると、2回目同じ処理に来たときに素通りしてしまいます。
    • good
    • 0
この回答へのお礼

 どうもありがとうございます!
Form_MsgBox側のButtonOK_Click時にボタン自身のTagを
切り替えるようにいたしまして、Form1側でそれを待つように
してみましたが、Form_MsgBoxが表示されると同時に固まってしまいます。。。orz

  Do Until Form_MsgBox.ButtonOK.Tag = 1 or Form_MsgBox.ButtonCancel.Tag = 1
System.Threading.Thread.Sleep(1000)
Loop
 もう少し考えてみます!この度はご親切にアドバイスいただき
誠にありがとうございました!!

お礼日時:2010/01/10 09:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A