人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

フォーム間のデータの受け渡し。

VisualStudio2008上でVBを用いてプログラムを作成しています。

あるフォーム上(Form1)で作業をしている時に、textbox1に入力する値を検索するために検索用フォーム(Form2)の検索結果をForm1上のtextbox1に入力する要件があります。

この時Form1上でForm2のインスタンスを作成し、showメソッドでForm2を呼び出して、Form2でForm1.textbox1.textにForm2で求めた値を代入すれば一応は要件を満たします。

しかしForm2上で行う検索はプログラムの色々な場所から呼び出して使う可能性が高いのです。

ところがForm2上でわざわざForm1.textbox1.textを指定して代入しているのでこの方法だと呼び出し元の数だけ検索フォームを作成する必要があるように思えます。

呼び出し元は複数で検索フォーム自体は1個で(できればコードも)済ませたいのですが何かいい方法はありますでしょうか?


イメージとしては、Form1の任意のメソッド、例えば検索ボタンの押下のイベントに関連するメソッド内で、
Form1でForm2のインスタンスを生成する。
Form2の結果をどこかに持っておく。
Form2の結果を参照して、自分自身のtextbox1に結果を代入する。

みたいな事ができればと思っています。



●質問者: natsumi2000
●カテゴリ:コンピュータ
✍キーワード:VB イベント イメージ インスタンス コード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mattn
●27ポイント

どういう動作を期待されているか分かりませんが...

Form2のコンストラクタ(New)の引数にtextboxコントロールを貰う様にして、処理内でForm2のインスタンスを破棄してしまう方法が良いかと思います。

Form1

Dim form2 As New Form2(Me.textbox1)

form2.ShowDialog(Me)
form2.Dispose()

Form2

Private textbox As TextBox
Sub New(ByRef textbox As Textbox)
 Me.textbox = textbox
End Sub

こうしておいてForm2のボタンクリックなどのイベントでtextboxに値を設定します。

ただしこの場合、Form2がモーダルダイアログの場合に限りますが。

http://www.hatena.ne.jp/

◎質問者からの返答

ありがとうございます。

説明の仕方が良くなかったのですが、たとえばForm1のテキストボックスをクリックするとForm2が開いて、Form2で何か値を選択するとForm2を破棄、Form1のテキストボックスにForm2で選んだ値が入っていると言う動作を実現したかったのです。


2 ● HALSPECIAL
●27ポイント

検索結果をプロパティで受け取ります

フォーム1

'検索
Private Sub Kensaku()
 Dim f2 As New Form2
 f2.ShowDialog()
 Me.textbox1.Text = f2.Kekka '結果プロパティから
 f2.Dispose()
 f2 = Nothing
End Sub

フォーム2

Private _kekka As String 'フォーム2で検索した結果を格納しておく

'結果プロパティ
Public ReadOnly Property Kekka() As String
 Get
 Return _kekka
 End Get
End Property

3 ● freemann
●26ポイント

質問の内容からみると処理内容は、Form1などの呼び出し側からForm2を標示し、Form2は検索結果を自分自身で保持しておいて、呼び出し側は自分で欲しい時にForm2から結果を取得するという処理であると考えました。

であれば、Form2にPublicなプロパティを設定してはどうでしょうか。

結果がほしいものは、プロパティを経由して取得するのです。

コードにすると次のようになるのではないでしょうか。

http://www.hatena.ne.jp/


Public Class Form1

Private frm2 As Form2

Private Sub btnShowSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSearch.Click

frm2 = New Form2()

frm2.Show()

End Sub

Private Sub btnGetResult_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetResult.Click

If Not (frm2 Is Nothing) Then

Me.TextBox1.Text = frm2.SearchResult

End If

End Sub

End Class


Public Class Form2

Public Property SearchResult() As String

Get

Return Me.TextBox1.Text

End Get

Set(ByVal value As String)

End Set

End Property

End Class

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ