如何从VB.NET中的对话框表单中获取值?

时间:2013-12-12 18:20:36

标签: vb.net winforms textbox dialog modal-dialog

我有一个“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”中插入的值?

4 个答案:

答案 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,请确保设置按钮的对话框结果。