web-dev-qa-db-fra.com

Comment obtenir des valeurs d'un formulaire de dialogue dans VB.NET?

J'ai un formulaire "frmOptions" avec une zone de texte nommée "txtMyTextValue" et un bouton nommé "btnSave" pour enregistrer et fermer le formulaire lorsqu'il est cliqué,

alors, je montre cette forme de dialogue "frmOptions" quand un bouton "btnOptions" est cliqué sur la forme principale "frmMain", comme ceci

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

Comment puis-je obtenir dans le formulaire principal "frmMain" la valeur insérée dans la zone de texte "txtMyTextValue" lorsque l'utilisateur clique sur "btnSave"?

11
Max

Vous souhaitez capturer les informations à partir de la boîte de dialogue uniquement si le résultat est OK (l'utilisateur appuie sur Save au lieu de Cancel ou ferme la boîte de dialogue d'une autre manière), procédez comme suit:

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

Maintenant, à l'intérieur de votre formulaire de dialogue, vous devez définir le résultat Windows.Forms.DialogResult.OK lorsque l'utilisateur clique sur le bouton correspondant à l'action OK du formulaire de dialogue, comme suit:

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
21
Karl Anderson

Vous pouvez utiliser Events pour s’occuper de cela. Avec cette approche, le formulaire de configuration ne doit pas nécessairement être modal et l'utilisateur peut cliquer sur le bouton Enregistrer à tout moment.

Dans les options:

'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

Dans frmain:

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
3
N0Alias

La méthode la plus simple consiste à ajouter une propriété publique au formulaire frmOptions qui renvoie une chaîne interne déclarée au niveau global de frmOptions.

Dim strValue As String
Public Property MyStringValue() As String
    Get
       Return strValue
    End Get
End Property

Ensuite, lorsque votre utilisateur clique sur le bouton OK pour confirmer ses choix, vous copiez la valeur de la zone de texte dans la variable interne.

Private Sub cmdOK_Click(sender As Object, e As System.EventArgs) Handles cmdOK.Click
    strValue = txtMyTextValue.Text
End Sub

Enfin dans le frmMain vous utilisez un code comme celui-ci pour récupérer la valeur insérée 

Private Sub ShowOptionsForm()
    Using options = New frmOptions()
       if DialogResult.OK = options.ShowDialog() Then
          Dim value = options.MyStringValue
       End If
    End Using
End Sub

Je préfère éviter l'accès direct aux contrôles internes de frmOptions, une propriété offrant un indirection pouvant être utilisée pour mieux valider les entrées fournies par votre utilisateur.

2
Steve

Vous pouvez accéder à la valeur à partir de l'instance frmOptions. Cependant, cela enfreint la loi de Demeter.

Vous devez exposer la valeur avec une propriété dans votre classe . Classe publique frmOptions

Public ReadOnly Property MyTextValue As String
    Get
        Return Me.txtMyTextValue.Text

    End Get
End Property

Classe de fin

Ensuite, vous pouvez accéder à la valeur:

 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

Enfin, si vous utilisez une boîte de dialogue, assurez-vous de définir le résultat de la boîte de dialogue pour le bouton.

0
user3096633