VB.net Impossible que la sortie apparaisse dans ma liste. Question débutants

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

  •  08-07-2019
  •  | 
  •  

Question

Essayer de faire en sorte que l'utilisateur place 3 nombres dans 3 zones de texte et en obtienne la moyenne.

Private Sub btnAverage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAverage.Click

  Dim a As Integer = CInt(txtone.Text)        
  Dim b As Integer = CInt(txtTwo.Text)
  Dim c As Integer = CInt(txtThree.Text)
  Dim average As Integer   
  average = (a + b + c) / 3

  lstOutput.Text = average

End Sub 
Était-ce utile?

La solution

Essayez de remplacer le type de moyenne d'Integer par Double

.
Dim average as Double

Actuellement, vous essayez de stocker la moyenne dans un entier qui ne peut contenir qu'un nombre entier. Les moyennes ont tendance à être des nombres non entiers et nécessitent un type de données pouvant le représenter. Double est bon pour la plupart des situations. Cela devrait résoudre votre problème.

EDIT Un opérateur a mentionné que lstOutput est un ListBox

C’est l’une des choses confuses avec WinForms. Même si chaque contrôle possède une propriété Text, tous ne font rien en réalité. Ils ne s'appliquent qu'aux éléments qui affichent directement un seul bloc de texte ou une seule valeur. Bouton Ex, étiquette, etc ...

Un ListBox, en revanche, affiche un groupe d’éléments. Vous souhaitez ajouter un nouvel élément à la liste.

lstOutput.Items.Add(average.ToString())

Autres conseils

La propriété Texte d'une zone de liste récupère ou définit le élément sélectionné . Vous n'avez pas encore ajouté votre moyenne à la liste.

Essayez:

lstOutput.Items.Add (moyenne)

Êtes-vous sûr que txtOne.text txtTwo.text et txtThree.txt sera toujours une valeur entière?

Vous devrez peut-être également modifier les vars a, b, c en doublons et vérifier que l'utilisateur n'a pas fourni de valeurs non numériques.

Si l'utilisateur met "un" " dans la zone de texte txtOne, vous obtiendrez une exception kablowee.

(codage de l'air ici)

   dim a as new double
   try
       if isnumeric(txtOne.text.tostring.trim) then
          a = cdbl(txtOne.text.tostring.trim)
       end if

    'repeat for b and c ...

    catch ex as exception
       messagebox.show(ex.message.tostring)
    end try

Et, je ne suis pas sûr d'avoir raison, (peut-être que quelqu'un m'éclairera), mais est-ce que .NET considère la conversion de type de string en int différemment dans ces deux cas

a  = cint(txtOne.text)

et

a = cint(txtOne.text.tostring)

???

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top