tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルFORM間の値渡し
記事No6416
投稿日: 2007/10/09(Tue) 19:37
投稿者びぎ
 こんばんは。

こちらのサイトの内容を参考に得意先コード索引を
作りたいと思うのですが、
子フォームには選択ボタンと終了ボタンがあり
選択ボタンをクリックした時のみ、親フォームに選択した値を
セットしたいのです。

下記のコードですが
f2_Closingで lbl.Text = f2.MyForm2TextBoxと
親フォームのlblに値をセットしています。
これだと、選択ボタン、終了ボタン両方セットしてしまいます。

子フォームのほうで
終了ボタンクリックならTextBox1.Text = ""
として対処するような方法はおかしいでしょうか?

また、多くの方がコード検索のプログラムを作成しているかと思いますが
親フォームでコードを受け取るのはf2_Closingで行うのが一般的なのでしょうか?

下記にコードを載せます。

親フォーム
Private Sub btnTOMES_Click(ByVal sender As Object, _
            ByVal e As EventArgs)
              If f2 Is Nothing OrElse f2.IsDisposed Then
            f2 = New Form2
        End If
        f2.StartPosition = FormStartPosition.CenterParent
        f2.ShowDialog()

    End Sub
  
    Private Sub f2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles f2.Closing
        lbl.Text = f2.MyForm2TextBox
    End Sub

子フォーム
Public Property MyForm2TextBox()
        Get
            Return TextBox1.Text
        End Get
        Set(ByVal value)
            TextBox1.Text = value
        End Set
    End Property

ご教授の程、宜しくお願いします。

[ツリー表示へ]
タイトルRe: FORM間の値渡し
記事No6417
投稿日: 2007/10/09(Tue) 19:59
投稿者Hongliang
ShowDialog メソッドはダイアログが閉じるまで制御が返りませんので、
ShowDialog メソッドの返値を見れば
ダイアログでコミットしたのかキャンセルしたのかを判断できます。
ので、判断ついでに設定すればいいでしょう。
正しい返値を返すために、Form2 の方では各ボタンのクリックイベントで、
自身の DialogResult プロパティに適切な値を設定します(OK/Cancel が一般的ですかね)。
ShowDialog で開かれた場合、この DialogResult への何らかの値の代入でもって
ダイアログは閉じられますので Close の呼び出しは不要です。

Form2 は使いまわすんではなく、クリックイベントごとに New して使い終わったら Dispose を。

>また、多くの方がコード検索のプログラムを作成しているかと思いますが
> 親フォームでコードを受け取るのはf2_Closingで行うのが一般的なのでしょうか?
普通しません。
モーダルダイアログ(一般的なダイアログ)なら上記のように返値を見て判断します。
モードレスダイアログ(IE の検索窓みたいに、開いている間も元のフォームを操作できる奴)なら
イベントで通知したりします。

[ツリー表示へ]
タイトルRe^2: FORM間の値渡し
記事No6418
投稿日: 2007/10/10(Wed) 13:47
投稿者びぎ
ありがとうございます。

早速 Windows.Forms.DialogResult.OK を使うことにしました。

[ツリー表示へ]
タイトルRe^2: FORM間の値渡し
記事No6419
投稿日: 2007/10/10(Wed) 14:20
投稿者びぎ
すいません、ちなみにForm2のDisposeは
どのイベントで行うのでしょうか?

FormClosingとかでしょうか??

[ツリー表示へ]
タイトルRe^3: FORM間の値渡し
記事No6420
投稿日: 2007/10/10(Wed) 15:37
投稿者Hongliang
New して使い終わったら(表示が終わって必要な値を取ったら)すぐ Dispose です。
Click イベントの中で生成から破棄まで完結できますね。
Form2 をメンバに持つ必要もなくなります。

[ツリー表示へ]
タイトルRe^4: FORM間の値渡し
記事No6421
投稿日: 2007/10/10(Wed) 16:25
投稿者びぎ

すいません。

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

[ツリー表示へ]