VB.NET: Quelle est la meilleure façon de récupérer une valeur à partir d'une deuxième forme?

StackOverflow https://stackoverflow.com/questions/741663

  •  09-09-2019
  •  | 
  •  

Question

Je me enseigner VB.Net.

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

Quelle est la meilleure façon de le faire?

Dans mon esprit, je pensais le long des lignes d'un appel de fonction comme « doLogin » qui « show » le LoginForm, capturer les données saisies, éliminer le formulaire et le retourner les informations de connexion (probablement dans une sorte de haricot ). D'une certaine façon, je ne vois pas cela comme étant possible

Ce que j'est actuellement moins élégante. LoginForm est représenté par Form1 modalement (à savoir showDialog); une référence « moi » est passé à la deuxième fenêtre. Après l'entrée d'utilisateur a été reçu sur LoginForm, je mis une valeur sur Form1, puis éliminer.

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

Était-ce utile?

La solution

J'ai toujours passé dans un délégué à la seconde forme qui peut être appelé à « passer en arrière » les valeurs de la deuxième forme dans le premier.

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

modèle d'observation classique.


Un exemple d'implémentation est la suivante:

Ajouter une signature de délégué à Form1. Dans le gestionnaire d'événements clic bouton de Form1, instancier la classe Form2 et délégué de 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 attribuera 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.

Autres conseils

Vous pouvez également récupérer des données à l'aide de VB.NET "My.Forms"

Le texte ci-dessous prend le d'une zone de texte dans le LoginForm et le met dans une zone de texte sous la forme principale.

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top