2017-09-14 3 views
0

J'ai un formulaire (CarForm) qui est généré dynamiquement lorsqu'une fonction est appelée (CarBenefitFrm) et il comprend une case à cocher qui, une fois cliqué, activera une zone de texte (HireBox). J'ai associé un gestionnaire avec cette zone de texte afin que chaque fois que le texte change, il devrait enregistrer le texte dans une variable (résultat) puis retourner ce résultat, ce code est inclus dans le sous appelé HireInput. Cependant, je ne peux pas mettre l'instruction return de la fonction dans le sous-répertoire.déclaration de retour dans le gestionnaire sous

Ci-dessous j'ai joint une image de la forme

enter image description here

Comment puis-je retourner la variable « résultat » à l'appelant?

La seule façon de savoir comment associer du code à un gestionnaire est de l'inclure dans un sous-répertoire. J'ai lu sur les délégués, mais je ne sais pas comment je peux l'appliquer ici.

J'apprécierai toute aide que je peux obtenir, aussi une explication simple sur la façon dont les délégués travaillent.

Module CarBnft 

Public Function CarBenefitFrm() As Decimal 
    Dim result As Decimal 

    Dim CarForm As New Form 

    'CODE FOR GENERATING BUTTONS, CHECKBOXES, TEXTBOXES GOES HERE 

    Dim HireInput = Sub() 

         If (IsNumeric(HireBox.Text) = False) And (String.IsNullOrWhiteSpace(HireBox.Text) = False) Then 

          HireBox.Clear() 
          MsgBox("Please enter a number in this field", MsgBoxStyle.Information, "Error") 

         ElseIf (IsNumeric(HireBox.Text) = True) And (String.IsNullOrWhiteSpace(HireBox.Text) = False) Then 

          Decimal.Parse(HireBox.Text, Globalization.NumberStyles.AllowDecimalPoint) 
          result = HireBox.Text 
          return result 'not working because return 
              ' statement is within the 
              ' HireInput Sub           

         End If 

        End Sub 
    AddHandler HireBox.TextChanged, HireInput 'only know how to add code for a handler using a sub 

End Function 

End Module 
+1

Pourquoi doit-il être dynamiquement * généré *? Ressemble à une boîte de dialogue de variété de jardin – Plutonix

+0

... et un gestionnaire Sub - y compris les gestionnaires d'événements - ne renvoie rien. Que rendrait-il la valeur *** à ***? Windows l'a appelé, mais il ne se soucie pas de votre résultat ou ne sait pas quoi en faire. Si vous êtes déjà en train de capturer 'result', votre travail est fait sauf pour l'exposer comme une propriété ou une méthode – Plutonix

+0

Au lieu que CarForm soit un' Form', créez une nouvelle classe pour cela. Définissez une propriété publique dans la classe de formulaire accessible par l'appelant. Montrez le formulaire avec 'CarForm.ShowDialog()' et lisez la propriété une fois qu'elle est fermée. – djv

Répondre

0

Désolé de répondre tard. J'ai finalement réussi à obtenir le résultat que je voulais. Ce que j'ai fait, c'est que j'ai créé le formulaire (Car Form) au moment de la conception puis ajouté un gestionnaire de sorte que chaque fois que j'appuyais sur le bouton Accepter, le résultat était enregistré dans une variable publique que j'avais créée dans un module. accédé dans le formulaire.

J'ai ensuite ajouté un autre gestionnaire pour le bouton Accepter dans le formulaire appelant afin qu'il prenne le résultat maintenant stocké dans la variable publique.

Merci @djv pour m'avoir fait comprendre l'utilisation de Property et aussi pour @Plutonix pour avoir suggéré de concevoir le formulaire.