• ベストアンサー

ユーザフォームの入力結果の受け取り

VB6でMsgBoxやInputBoxのフォントを変えたいので、それらしきサブルーチンを作成しました。そのサブルーチンはユーザフォームへの表示内容を設定した後、それを呼び出し(Show method)、押されたコントロールボタンの番号やテキストをパブリック変数に入れて戻っています(Show methodの次のステップに戻りました)。これを引数で受け取るにはどうすればよいのでしょうか(パブリック変数を使いたくないので)。よろしくお願いします。

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

  • ベストアンサー
  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

自分の知る限りできない。 MsgBoxだと整数を返せるけど、所望のことをやりたければ、自分で作ったユーザーフォームで構造体を返さないといけない。 では、その構造体を返す関数を親フォームが呼ぶとして、呼ばれた関数がフォームを作ってフォームの中身を親フォームへ構造体に入れて返してやればよいことになる。 ところが、この呼ばれる関数へ値をセットするために、同じこと(パブリック変数に値を書き込む)が起こってしまう。 すげえいやだけど、私は親フォームの方に値をセットするための関数を用意しておいて、子フォームはその関数を呼び出して親フォームに値を渡してから自分を消すようにしています。

yharapan
質問者

お礼

素早い回答ありがとうございました。当面、MsgBoxの方はパブリック変数のままにしておきます。N88BASIC世代の、VB初心者ですので、ユーザフォームがどのように呼び出され、戻ってくるよく分からず、ブラックボクスのようで、こんな質問をしました。構造体のことは十分理解できませんが、後段の対処法は私にも出来そうですので、試してみます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

ダイアログ自体を自作するなら、.NETのShowDialogのようなメソッドを実装すればよいかと。 [ Form2(ダイアログ用フォーム) ] コントロール:Text1(テキストボックス)、Command1,Command2(ボタン) Dim DialogResult As VbMsgBoxResult ' フォームをダイアログとして表示。 ' 押されたボタンを戻り値で、入力文字列をInputTextへ格納して返します。 Public Function ShowDialog(ByVal Owner As Form, ByRef InputText As String) As VbMsgBoxResult DialogResult = vbCancel Me.Show vbModal, Owner ShowDialog = DialogResult If DialogResult = vbOK Then InputText = Text1.Text End Function ' OKボタン Private Sub Command1_Click() DialogResult = vbOK Me.Hide End Sub ' キャンセルボタン Private Sub Command2_Click() Me.Hide End Sub [ Form1(メインフォームからの呼び出し例) ] Private Sub Command1_Click() Dim frm2 As New Form2 Dim strInput As String If frm2.ShowDialog(Me, strInput) = vbOK Then Debug.Print strInput End If Unload frm2 End Sub

yharapan
質問者

お礼

回答ありがとうございました。流れはおおよそ分かりました。VB6でさえ初心者の私には、NETではそんなこともできるのかという状態です。今回はRS232Cで機械を制御する必要上、VB6でプログラミングしていますが、私用のプログラミングにはNETを始めようと思っていますので、利用させていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A