3

私はVB.Netを独学しています。

ここで私が最近遭遇した問題があります。アプリケーションにメインの Form1 があるとします。Form1 は 2 番目の LoginForm を呼び出します。これは (名前が示すように) ユーザー名/パスワード タイプ フィールドを持つログイン ウィンドウです。予想される動作は、LoginForm がログインの詳細を取得して Form1 に返すことです。

これを行う最善の方法は何ですか?

私の心の中では、LoginForm を「表示」し、入力されたデータをキャプチャし、フォームを破棄し、ログインの詳細を返す「doLogin」のような関数呼び出しの行に沿って考えていました (おそらく何らかの Bean で)。どういうわけか私はこれが可能であるとは思わない

私が現在持っているものはエレガントではありません。LoginForm は Form1 によってモーダルに表示されます (つまり、showDialog)。「me」参照が 2 番目のウィンドウに渡されます。LoginForm でユーザー入力を受け取った後、Form1 に値を設定して破棄します。

これはみんながする方法ですか?

4

3 に答える 3

2

これは C# ですが、簡単に変換できます: C# 初心者向けヘルプ、子から親フォームに値を渡すにはどうすればよいですか?

于 2009-04-12T12:01:21.927 に答える
1

私は常に、2 番目のフォームから最初のフォームに値を「戻す」ために呼び出すことができるデリゲートを 2 番目のフォームに渡してきました。

そうすれば、密結合を回避できます。

古典的なオブザーバー パターン。


実装例は次のとおりです。

Form1 に委任署名を追加します。Form1 のボタン クリック イベント ハンドラーで、Form2 クラスと Form1 のデリゲートをインスタンス化します。Form2 の関数をデリゲートに割り当て、デリゲートを呼び出します。

'Form1.vb
Public Delegate Sub delPassData(ByVal text As TextBox)

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  Dim frm As Form2 = New Form2
  Dim del As delPassData = New delPassData(AddressOf frm.funData)
  del(Me.textBox1)
  frm.Show()
End Sub

Form2 で、デリゲートが指す関数を追加します。この関数は、textBox1 のテキストを label1 に割り当てます。

'Form2.vb
Public Sub funData(ByVal text As TextBox)
  label1.Text = text.Text
End Sub

Form1 にデータを戻すにfunDataは、必要な値を返す関数を作成するだけです。

于 2009-04-12T12:01:18.320 に答える