2017-09-27 5 views
-1

je veux appeler ce public sous hungrys (gutom comme chaîne) de ma classe zooanimal à mon formulaire1.vb. pour référence, s'il vous plaît se référer à mon code. i obtenir toujours une erreur "expression ne produit pas de valeur" dans mes Textbox10.text = za.hungrys (gutom sous forme de chaîne)expression ne produit pas une valeur lors de l'appel d'un sous

Public Class ZooAnimal 

Public Sub New() 
hungry = isHungry() 

Public Function isHungry() As Boolean 
    If age > 0 Then 
     hungry = True 
    End If 
    If age <= 0 Then 
     hungry = False 
    End If 
    Return hungry 
End Function 

Public Sub hungrys(ByRef gutom As String) 
    If hungry = True Then 
     gutom = "The zoo animal is hungry" 
    End If 
    If hungry = False Then 
     gutom = "The zoo animal is not hungry " 
    End If 
End Sub 

Public Class Form1 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

Dim za As New ZooAnimal 
Dim gutom As String = "" 

TextBox10.Text = za.hungrys(gutom) 
+2

Veuillez lire [ask] et prenez le [tour]. L'erreur est précise. 'hungrys' est un sous qui signifie qu'il ne retourne rien, mais vous essayez d'assigner un résultat comme si vous l'écriviez en tant que fonction ... ou assignez cet argument à la zone de texte. Vous devez également définir «Option Strict On» - «âge» vient de nulle part – Plutonix

Répondre

0

Modifier votre Sub à Function.
Sub sont des procédures qui ne pas Renvoyer une valeur.
Function Retourne des valeurs.
C'est aussi simple que cela.

De même, déclarez le type de données de votre paramètre gutom As Boolean car il stocke une valeur pouvant être True or False.

N'utilisez pas le If redondant. Utilisez plutôt If-Else.

Public Function hungrys(ByVal gutom As Boolean) As String 
    If hungry = True Then 
     gutom = "The zoo animal is hungry" 
    Else 
     gutom = "The zoo animal is not hungry " 
    End If 
    Return gutom 
End Function 

appeler par

TextBox10.Text = za.hungrys(True) 
2

Si vous essayez d'obtenir une valeur d'un Sub avec un paramètre ByRef plutôt que la valeur de retour d'un Function alors ceci:

TextBox10.Text = za.hungrys(gutom) 

devrait être ceci:

za.hungrys(gutom) 
TextBox10.Text = gutom 

La première ligne appelle le Sub et affecte une nouvelle valeur à la variable et la deuxième ligne affiche la valeur de la variable dans TextBox.

À moins que ce soit comme un exercice d'apprentissage cependant, il n'y a aucune bonne raison d'utiliser un ByRef paramètre là. Vous auriez normalement écrire cette méthode comme ceci:

Public Function hungrys() As String 
    Dim gutom As String 

    If hungry Then 
     gutom = "The zoo animal is hungry" 
    Else 
     gutom = "The zoo animal is not hungry " 
    End If 

    Return gutom 
End Sub 

puis l'appeler comme ceci:

Dim gutom As String = za.hungrys() 

TextBox10.Text = gutom 

ou tout simplement:

TextBox10.Text = za.hungrys() 

Notez que cette méthode utilise un plutôt que If...Else deux blocs distincts If. A propos, c'est un nom terrible et terrible pour une méthode. Premièrement, il devrait commencer par une lettre majuscule. Deuxièmement, "hungrys" ne vous dit pas ce que fait la méthode. Si je lisais cela sans contexte, je n'aurais aucune idée de son objectif.

+0

cela fonctionne :) Merci beaucoup @jmchilhinney. – Blue

+0

cela fonctionne :) Merci beaucoup @jmchilhinney – Blue