我正在创建一个“部门选择器”表单,它将作为我的Winforms应用程序中许多“主要”表单的模态弹出表单。理想情况下,用户将点击文本框旁边的图标,然后弹出该表单,他们将选择所需的部门,当他们单击“确定”时,对话框将关闭,我将有所选值以更新文本框。
我已经通过将对话框框架的所有者传递到对话框表单并使OK按钮单击事件执行正确的更新路线,但这迫使我进行DirectCast到表单类型,因此我只能在当前表单上重复使用选择器。
我已经能够在构造函数中使用ByRef变量并成功更新值,但它仅在构造函数中有效。如果我尝试将ByRef值分配给部门选择器类中的某个内部变量,则会失去引用方面。这是我附加到我的表单的基本代码:
我已经通过将对话框框架的所有者传递到对话框表单并使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
ShowDialog()
,则在调用Close()
时对话框不会被释放,否则它会被释放。请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.form.close.aspx。当然,在上面的示例中,对话框将在`using`块结束时被释放,因此您需要在该块内访问对话框的属性。或者,您可以不使用`using`,并在访问所需属性后自行释放对话框。 - Jason S