我有一个“frmOptions”表单,其中包含一个名为“txtMyTextValue”的文本框和一个名为“btnSave”的按钮,用于在单击时保存并关闭该表单,
然后,当我在主窗体“frmMain”上点击一个按钮“btnOptions”时,我正在显示这个对话框“frmOptions”,就像这样
Private Sub btnOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOptions.Click
ShowOptionsForm()
End Sub
Private Sub ShowOptionsForm()
Dim options = New frmOptions
options.ShowDialog()
End Sub
当点击“btnSave”时,如何在主格式“frmMain”中插入文本框“txtMyTextValue”中插入的值?
答案 0 :(得分:22)
仅当结果为OK
(用户按Save
而不是Cancel
或以其他方式关闭对话框)时,您才想从对话框中捕获信息,所以这样做:
Private Sub ShowOptionsForm()
Dim options = New frmOptions
' Did the user click Save?
If options.ShowDialog() = Windows.Forms.DialogResult.OK Then
' Yes, so grab the values you want from the dialog here
Dim textBoxValue As String = options.txtMyTextValue.Text
End If
End Sub
现在,在对话框表单中,当用户单击与对话框表单的Windows.Forms.DialogResult.OK
操作对应的按钮时,您需要设置结果OK
,如下所示:
Public Class frmOptions
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
' Set the result to pass back to the form that called this dialog
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
End Class
答案 1 :(得分:3)
您可以使用事件来处理此问题。使用此方法,“设置表单”不必是“模态”,用户可以随时单击“保存”按钮。
在frmOptions中:
'You can expand the signature to take more than just a single String.
Friend Event SavedOptions(ByVal strData As String)
Private Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
RaiseEvent SavedOptions(txtMyTextValue.Text)
End Sub
在frmMain:
Private Sub ShowOptionsForm()
Dim options = New frmOptions
AddHandler options.SavedOptions, AddressOf OnOptionsSave
options.ShowDialog()
End Sub
Private Sub OnOptionsSave(ByVal strData As String)
'Or whatever you want to do on frmMain with Options Data.
MsgBox(strData)
End Sub
答案 2 :(得分:2)
最简单的方法是向frmOptions表单添加一个公共属性,该表单返回在frmOptions的全局级别声明的内部字符串
Dim strValue As String
Public Property MyStringValue() As String
Get
Return strValue
End Get
End Property
然后,当您的用户单击“确定”按钮确认其选择时,您将文本框的值复制到内部变量
Private Sub cmdOK_Click(sender As Object, e As System.EventArgs) Handles cmdOK.Click
strValue = txtMyTextValue.Text
End Sub
最后在frmMain中,您使用这样的代码来检索插入的值
Private Sub ShowOptionsForm()
Using options = New frmOptions()
if DialogResult.OK = options.ShowDialog() Then
Dim value = options.MyStringValue
End If
End Using
End Sub
我更喜欢避免直接访问frmOptions的内部控件,属性提供了一个间接,可用于更好地验证用户提供的输入。
答案 3 :(得分:0)
您可以从frmOptions实例访问该值。然而,这违反了得墨忒耳的规律。
您应该使用类中的属性公开该值。 公共类frmOptions
Public ReadOnly Property MyTextValue As String
Get
Return Me.txtMyTextValue.Text
End Get
End Property
结束班
然后您可以访问值:
Private Sub ShowOptionsForm()
Dim options = New frmOptions
Dim frmOptionTextValue As String
Dim frmOptionsDiagResult As DialogResult
frmOptionsDiagResult = options.ShowDialog()
If frmOptionsDiagResult = Windows.Forms.DialogResult.OK Then
frmOptionTextValue = options.MyTextValue
Else
'...
End If
End Sub
最后,如果您使用的是Dialog,请确保设置按钮的对话框结果。