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

このQ&Aのポイント
  • VB.NETで別のFormのボタンが押されるまで待機する方法について教えてください。
  • 現在、MsgBoxでの続行か中断かを選択する方法を使っていますが、新しいFormを作成したいと思っています。
  • Form_MsgBoxを表示した後、ButtonOKかButtonCancelが押されるまで待機したいです。他に良い方法はありますか?
回答を見る
  • ベストアンサー

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

【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が押されるまで待機したいのですが。。  検索いたしておりますと、何か他のアプリを起動した場合に それが終わるまで待機する、といった方法は結構見つかるのですが。。。  何か良さそうな方法など思いつかれるようでございましたら、 是非ともアドバイスいただきたくお願い申し上げます。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • MKT_
  • お礼率99% (329/330)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Form_MsgBoxを ShowDialogで表示してやるってのはダメなんですか? 親FormのButton1を押した際に 親Form内の他のコントロールを操作したいのですとこの手法は使えませんが ・・・

MKT_
質問者

お礼

 どうもありがとうございます! うまくいきそうでございます^^ 一つだけ、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

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

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 といった具合で ・・・

MKT_
質問者

お礼

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

MKT_
質問者

補足

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

  • t-aka
  • ベストアンサー率36% (114/314)
回答No.1

Form_MsgBoxにメンバ変数をひとつ設定して それをチェックしに行く、アクセス関数を設けてはどうでしょうか。 押されていない間、Do ~Loopステートメントで待ち続ける。 Form_MsgBox側では、どのボタンが押されたかを格納する変数を用意しておきます。 考え方としては、これでいけるのかな。と思います。 注意しなければならないのは メンバ変数の初期化です。 これを怠ると、2回目同じ処理に来たときに素通りしてしまいます。

MKT_
質問者

お礼

 どうもありがとうございます! 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  もう少し考えてみます!この度はご親切にアドバイスいただき 誠にありがとうございました!!

関連するQ&A

  • 2つのメッセージボックスを表示している間、コードを待機させる方法

    2つのメッセージボックスを表示している間、コードを待機させる方法  今晩は,いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。  開発環境はXP+VB2008になります。  Form_MsgBox1とForm_MsgBox2上での操作が完了するまで Form1のコードを中断したいのですが、そのような事って 可能なのでございましょうか。。。??  そもそも中断させる方法が分からなかったのですが、 先の質問でご親切にShowDialogをお教えいただけましたので 【Form1】  Private Sub Button_Click    :   Dim f As New Form_MsgBox1   If f.ShowDialog(Me) = DialogResult.OK Then   Else    Exit Sub   End If    :  End Sub 【Form_MsgBox1】  Private Sub Form_MsgBox1_Load    :  Dim f As New Form_MsgBox2  f.Show()    :  End Sub といたしましたところ、Form_MsgBox2の操作が できなくなってしまいました。。 (それ以外は全部大丈夫でございます) Form_MsgBox1とForm_MsgBox2を交互に操作している間、 Form1だけ待機させて操作できなければよいのですが。。  検索いたしておりますと、複数のShowDialogが可能か どうかといったQ&Aがいくつか見つかるのですが、 いまいちよく分かりませんでしたorz  何かよさそうな方法がひらめかれるようでございましたら、 是非ともアドバイスいただきたくお願い申し上げます。  もしお詳しい方がいらっしゃいましたら,どうぞよろしく お願いいたします。

  • form2がボタンを押すと消えてしまう

    vb2010で、作成しています。form1から、form2を呼び出し、okボタンまたは、cancelボタンを押すと、無条件でform2が消えてしまいます。私がしたいのは、form2(パスワード入力ウィンドウ)でテキストボックスにパスワードを入力してokボタンを押して、それが正しい(1234)ときのみform2を消去することです。現在のところ、入力したパスワードが間違っていてもokボタンを押すと、form2は消えてしまいます。 form1側のコードとform2側のコードは以下です。お手数ですが御教示いただけると幸いです。 /////////Form1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TextBox1.PasswordChar = "*"c '//入力文字をマスクする If f.ShowDialog(Me) = DialogResult.OK Then If f.TextBox1.Text = "1234" Then f.Dispose() End If End If End Sub End Class /////////Form2 Public Class Form2 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.OK End Sub Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.Cancel End Sub End Class

  • Form2のボタンをクリックをしたらForm1を実行するには

    Visual basic 2008 でタイトル通り Form1のソースの中にForm2のボタンがクリックされたら 作業をするというIF文を作りたいのですが、わかりません どなたかご教授お願い致します わからないなりに If Form2.Button1 = Click Then Else Exit Sub End If とかやってみたんですけど式自体が間違っていて前に進めません 宜しくお願いします

  • Form間のデータ渡しについて

    申し訳ありません。VB.NET初心者です。 Form1から、ボタンAをクリックするとForm2がオープンします。 Form1から、ボタンBをクリックするとForm3がオープンします。 Form1では、Form2またはForm3で設定した値をそれぞれ演算に使おうとしています。 MicrosoftのHPからパクってForm1 - Form2間のデータの引渡しを行うことはできたの ですが、新規でForm3を作成して、Form1 - Form3間のデータの引渡しを行おうとする とForm3の立ち上がり時に "NullReferenceException はハンドルされませんでした"となり、 困ってしまいました。 使われている方から見ると簡単かもしれず 申し訳ありませんが、どなたか教えていただけないでしょうか。 ==================== Form1.vb ======================= Form1には、Label1、Label2、Button1、Button2があります。 Public Class Form1 Inherits System.Windows.Forms.Form Private m_form2 As Form2 Private m_form3 As Form3 Public Property LabelText() As String Get Return Label1.Text End Get Set(ByVal Value As String) Label1.Text = Value End Set End Property Public Property LabelText2() As String Get Return Label2.Text End Get Set(ByVal Value As String) Label2.Text = Value End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleYokusou.Click m_form2 = New Form2(Me) m_form2.ShowDialog() m_form2.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleHikito.Click m_form3 = New Form3() m_form3.ShowDialog() m_form3.Dispose() End Sub End Class ==================== Form2.vb ======================= Form2には、TextBox1、Button1があります。 Public Class Form2 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText = Me.TextBox1.Text End If End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If m_form1 Is Nothing = False Then Me.TextBox1.Text = m_form1.LabelText End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class ==================== Form3.vb ======================= Form3には、TextBox1、Button1があります。 Public Class Form3 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText2 = Me.TextBox1.Text End If End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TextBox1.Text = m_form1.LabelText2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • FormClosing イベント から終了を取り消すには VB2005

    VB2005で開発しているのですが。 FormClosingイベントの中で。Formの終了イベントを取り消すにはどうしたらよいでしょうか? たとえば。こんなコードがあったら 終了イベントの取り消しにはなんと書いたらよいでしょうか? Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing  If TextBox1.Text = "01" Then    MsgBox("完了!!", MsgBoxStyle.OkCancel)  Else   ' ここに取消終了のコードを書いたらいいのですか? End If End Sub すいませんが。アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • VB.NET Form1からForm2を開いたり閉じたりする方法

    VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。また、form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。 '----------------------------------- Private Sub CheckBox2_CheckedChanged ・・・   Dim f_cnt As Integer   Dim form2 As New Form2()   f_cnt = My.Application.OpenForms.Count   If CheckBox1.Checked = True Then     If f_cnt = 1 Then form1.Show() 'モードレスフォームとして表示する   Else    form2.Close() ←閉じない   End If End Sub '-----------------------------------

  • Formオブジェクトについて

    Formオブジェクトに関する質問です。 ある関数にフォームオブジェクトを引数として渡してやりたいのですが、何かよい方法はありますでしょうか? 例) Private Sub cmdTest_Click(Index as Integer) Dim frm as Form If Index = 0 then Load_Test(Form 2) Else Load_Test(Form 3) End if End Sub Private Sub Load_Test(frm as Form) frm.Show frm.Label1.Caption = "TEST” End Sub

  • VB2010の、Formを開く動作に関する質問です

    VB2010のFormについてお聞きしたいことがあります。 例えばForm1とForm2の2つがあるとして、 ・Form1上のボタンをクリック後Form2が表示される ・Form2を表示後Form1は自動で閉じられる。 この様な事をするにはどの様に行えばよろしいでしょうか? 試しに、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Form2.Show()   Me.Close() End Sub と、してみたのですが Form2が表示された直後に1と2両方消えてしまいました。 改善方法を教えていただけると嬉しいです。 よろしくお願いいたします。

  • 別フォームの呼び出し

    6.0でやってます。 form1からform2を呼び出す時、Command1_Clickの処理内で Set FORM = New form2 Call FORM.Show と書いて、form2が呼び出されたらYesNoメッセージボックスを表示し、 Yesを押したらform1のPublicプロシージャに飛んでからform2をUnloadし、Noだったらform2をUnloadするプログラムを作りたいのですが、クリックするとform2が表示されずに、メッセージボックスだけが表示されて、YesNoを選択した後でform2が表示されてしまいます。 それに、Call FORM.Showの処理に行くと、"既にアンロードされています"といったエラーが出ます。 書く順番がおかしいのでしょうか? *****form1のコード******* Private Sub Command1_Click() Set FORM = New form2 Call FORM.Show End Sub Public sub aaa() (処理) End Sub *****form2のコード****** Private Sub Form_Load() msg = MsgBox("戻りますか??", 4, "確認メッセージ") If msg = vbYes Then Form1.aaa Unload Me Else Unload Me End If

専門家に質問してみよう