2009-04-12 8 views
3

Je m'enseigne VB.Net.VB.NET: Quelle est la meilleure façon de récupérer une valeur d'un second formulaire?

Voici un problème que j'ai récemment rencontré. Dites que j'ai un Form1 principal dans ma demande. Form1 appelle un second LoginForm qui (comme son nom l'indique) est une fenêtre de connexion avec des champs de type nom d'utilisateur/mot de passe. Le comportement attendu est que LoginForm capture les détails de connexion et les renvoie à Form1.

Quelle est la meilleure façon de faire cela? Dans mon esprit, je pensais dans le sens d'un appel de fonction comme 'doLogin' qui montrerait le LoginForm, capturerait les données saisies, éliminerait le formulaire et renverrait les détails de connexion (probablement dans une sorte de haricot). D'une certaine manière, je ne vois pas cela comme étant possible

Ce que j'ai actuellement est moins élégant. LoginForm est représenté par Form1 de manière modale (c'est-à-dire showDialog); une référence «moi» est passée à la seconde fenêtre. Une fois que l'utilisateur a reçu une entrée sur LoginForm, je définis une valeur sur Form1, puis j'en dispose.

Est-ce la façon dont tout le monde le fait?

Répondre

1

J'ai toujours passé un délégué à la deuxième forme qui peut être appelée pour «renvoyer» les valeurs de la deuxième forme dans la première.

De cette façon, vous évitez tout couplage serré.

Modèle d'observateur classique.


Une mise en œuvre par exemple est la suivante:

Ajouter une signature de délégué à Form1. Dans le gestionnaire d'événements de clic de bouton Form1, instanciez la classe Form2 et le délégué Form1. Affectez une fonction de Form2 au délégué, et appeler le délégué:

'Form1.vb 
Public Delegate Sub delPassData(ByVal text As TextBox) 

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click 
    Dim frm As Form2 = New Form2 
    Dim del As delPassData = New delPassData(AddressOf frm.funData) 
    del(Me.textBox1) 
    frm.Show() 
End Sub 

Dans Form2, ajoutez une fonction à laquelle le délégué pointera. Cette fonction affectera le texte de textBox1 à label1.

'Form2.vb 
Public Sub funData(ByVal text As TextBox) 
    label1.Text = text.Text 
End Sub 

Pour transmettre des données de retour à Form1, il suffit de faire funData une fonction qui renvoie les valeurs que vous voulez.

+0

Attention à illustrer avec un échantillon de code? – Cerebrus

+0

choisi pour le grand article. Merci –

0

Vous pouvez également récupérer des données en utilisant VB.NET « My.Forms »

Le texte ci-dessous prend le d'une zone de texte dans la LoginForm et le place dans une zone de texte dans le formulaire principal.

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text 
Questions connexes