Winforms アプリケーションの「プライマリ」フォームの多くでモーダル ポップアップ フォームとして機能する「部門ピッカー」フォームを作成しています。理想的には、ユーザーがフォームをポップアップ表示するテキスト ボックスの横にあるアイコンをクリックし、必要な部門を選択します。[OK] をクリックすると、ダイアログが閉じて値が選択されます。でテキストボックスを更新します。
ダイアログ ボックスの所有者をダイアログ フォームに渡し、[OK] ボタンのクリック イベントで適切な更新を行うルートを既に実行しましたが、これにより、フォーム タイプに DirectCast を実行する必要があり、その後は再利用することしかできません。現在のフォームのピッカー。
コンストラクターで ByRef 変数を使用して値を正常に更新できましたが、コンストラクターでのみ機能します。Department Picker クラスの内部変数に ByRef 値を代入しようとすると、その参照の側面が失われます。これは私のフォームに添付された私の基本的なコードです:
Public Class DeptPicker
Private m_TargetResult As String
Public Sub New(ByRef TargetResult As String)
InitializeComponent()
' This works just fine, my "parent" form has the reference value properly updated.
TargetResult = "Booyah!"
' Once I leave the constructor, m_TargetResult is a simple string value that won't update the parent
m_TargetResult = TargetResult
End Sub
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
DialogResult = Windows.Forms.DialogResult.OK
' I get no love here. m_TargetResult is just a string and doesn't push the value back to the referenced variable I want.
m_TargetResult = "That department I selected."
Me.Close()
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
DialogResult = Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
End Class
ここで何が欠けているのか、またはこれを実現するための別のアプローチを教えてもらえますか?
注: コード サンプルは VB.NET にありますが、C# の回答も使用します。8^D