Я создаю форму «выбора отдела», которая будет служить модальной всплывающей формой со многими из моих «основных» форм приложения Winforms. В идеале пользователь собирается щелкнуть значок рядом с текстовым полем, которое откроет форму, он выберет необходимый отдел, и когда он нажмет OK, диалоговое окно закроется, и я выберу значение, которое я выберу обновить текстовое поле с помощью.
Я уже прошел маршрут, передав владельца диалогового окна в диалоговую форму и выполнив соответствующее событие нажатия кнопки ОК, чтобы выполнить соответствующее обновление, но это вынуждает меня выполнить DirectCast для типа формы, и тогда я могу использовать повторно только в текущей форме.
Мне удалось использовать переменную ByRef в конструкторе и успешно обновить значение, но оно работает только в конструкторе. Если я пытаюсь присвоить значение 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