Remplir des texbox a partir d'un tableau [Résolu]

atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention - 16 oct. 2016 à 19:53 - Dernière réponse : atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention
- 17 oct. 2016 à 17:33
bnj, je suis un amateur de vb
je viens de crée un tableau pour calculer et vérifier un chiffre pour chaque mois
et je veux afficher les résultats dans des textbox a partir du tableau déjà remplis
la seul solution que j'ai trouvé c'est de les affichés un par un, mais c'est trop long
est ce quil ya une solution SVP
voici mon code qui marche mais long
---------------------------
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim GH(11, 1) As String
GH(0, 0) = h01moy
GH(1, 0) = h02moy
GH(2, 0) = h03moy
GH(3, 0) = h04moy
GH(4, 0) = h05moy
GH(5, 0) = h06moy
GH(6, 0) = h07moy
GH(7, 0) = h08moy
GH(8, 0) = h09moy
GH(9, 0) = h10moy
GH(10, 0) = h11moy
GH(11, 0) = h12moy
' verification de GH
For i As Integer = 0 To 11
If GH(i, 0) <= 30 Then GH(i, 1) = 1
If GH(i, 0) > 30 And GH(i, 0) <= 50 Then GH(i, 1) = 2
If GH(i, 0) > 50 And GH(i, 0) < 70 Then GH(i, 1) = 3
If GH(i, 0) >= 70 Then GH(i, 1) = 4
Next
GHjan.Text = GH(0, 1)
GHfeb.Text = GH(1, 1)
GHmar.Text = GH(2, 1)
GHapr.Text = GH(3, 1)
GHmay.Text = GH(4, 1)
GHjun.Text = GH(5, 1)
GHjul.Text = GH(6, 1)
GHaug.Text = GH(7, 1)
GHsep.Text = GH(8, 1)
GHoct.Text = GH(9, 1)
GHnov.Text = GH(10, 1)
GHdec.Text = GH(11, 1)
End Sub
--------------------------------------------
Afficher la suite 

10 réponses

Répondre au sujet
Whismeril 10603 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 16 oct. 2016 à 20:08
0
Utile
Qu'est ce qui est long?
Commenter la réponse de Whismeril
atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention - 16 oct. 2016 à 20:37
0
Utile
le long c'est affecter chaque fois a une textbox la valeur a afficher
parce que c'est un grand programme
ce n’est que le début
Commenter la réponse de atahriz
Whismeril 10603 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 16 oct. 2016 à 23:20
0
Utile
1
Ok,

Deux options
  • au lieu d'un tableau à plusieurs dimensions, tu crées une classe adaptée à ton besoin.

Tu mets autant d'instances de cette classe que nécessaire dans une List(of ) et tu bindes le tout dans un contrôle plus adapté (listbox, datagridview...)
Voir ici un exemple de binding
  • tu conserves ton principe, et tu instances des textbox pendant l'exécution. Pour savoir comment est initialisé un textbox dans le code d'un Form, tu tapes Public Sub New() et entrée.

Ça va t'afficher le constructeur qui par défaut est caché en VB.net.
Sélectionne InitializeComponent, fais un click droit et Atteindre la définition. Ça va t'amener dans le code que Visual Studio écrit pour toi à chaque contrôle que tu poses sur un Form, tout ce qui est nécessaire pour placer un textBox s'y trouve.

Note que .Net offre des outils plus performants que les tableaux. La list(of ) est le plus simple. Elle permet d'ajouter, supprimer, déplacer des éléments sans jamais se soucier de la taille de la collection. Elle permet toutes sortes de requêtes grâce à Linq (les tableaux aussi, mais pas aisément en multidimension).
Le binding te permet quand à lui toute la partie laborieuse d'affectation de données à des contrôles.
atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention - 17 oct. 2016 à 15:10
merci beaucoup pour votre aide
Commenter la réponse de Whismeril
atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention - Modifié par atahriz le 17/10/2016 à 15:53
0
Utile
1
merci Whismeril pour votre conseil
c'est plus facile en utilisant la listview
un seule code pour remplir toute une colonne
super
-------------
reste une petite question est ce qu'on peut lire des données a partir de la listview?
------------------
Dim GH(11, 1) As String
GH(0, 0) = h01moy
GH(1, 0) = h02moy
GH(2, 0) = h03moy
GH(3, 0) = h04moy
GH(4, 0) = h05moy
GH(5, 0) = h06moy
GH(6, 0) = h07moy
GH(7, 0) = h08moy
GH(8, 0) = h09moy
GH(9, 0) = h10moy
GH(10, 0) = h11moy
GH(11, 0) = h12moy
' verification de GH
For i As Integer = 0 To 11
If GH(i, 0) <= 30 Then GH(i, 1) = 1
If GH(i, 0) > 30 And GH(i, 0) <= 50 Then GH(i, 1) = 2
If GH(i, 0) > 50 And GH(i, 0) < 70 Then GH(i, 1) = 3
If GH(i, 0) >= 70 Then GH(i, 1) = 4
'remplir la liste
Dim ghx As New ListViewItem(i + 1)
ghx.SubItems.Add(GH(i, 1))
Listview1.Items.Add(ghx)
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 17 oct. 2016 à 15:30
Bonjour
oui on le peut heureusement
Mais il faut se mettre dans la tête que la Listview est un contrôle qui sert à afficher ou à savoir quelle ligne on a cliqué .
Etant donné que tu as rempli ta listview avec un tableau, une list (of XXXX) ou tout autre chose comme structure autant lire ce tableau ou cette list(of XXXXX) ou cette structure
Si tu sélectionnes la ligne 3 par exemple c'est la 4° ligne dans ton tableau ( attention on compte à partir de 0 en VB net )
Commenter la réponse de atahriz
Whismeril 10603 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 17 oct. 2016 à 15:42
0
Utile
3
Oui, on peut lire des données à partir de n'importe quel contrôle.
Mais il est plus judicieux d'avoir les avoir stockées dans une collection et de ne se servir du contrôle que pour l'affichage et l'interaction avec l'utilisateur.


Je m'explique, si tu dois manipuler des nombres, pour les afficher il faut les convertir en texte, puisqu'un contrôle affiche du texte.
Ensuite tu vas reprendre la donnée pour en faire un calcul, il te faut reconvertir en nombre, et ensuite convertir le résultat en texte, ect....
Si tu utilises le binding, ces étapes de conversions sont transparentes pour toi, car tu travailles sur la collection et c'est le binding qui affiches. Attention, le binding avec un Listview c'est pas le pied, il.est plus aisé de prendre une listbox ou un datagridview.

Allons plus loin, tes nombres sont des distances en cm qui arrivent toutes les 5 secondes. Pendant l'acquisition, tu veux détecter les valeurs aberrantes, tu les affiches donc en cm arrondies à l'entier le plus proche. Mais après, tu veux pouvoir regarder les millimètres dans les détails.
Si tu n'as que ta listview arrondie, c'est mort, si tu as une collection, avec la valeur brute et un binding qui arrondi au moment de l'affichage tu peux rejouer te mesures comme tu veux.
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 17 oct. 2016 à 15:51
Salut Whis : on se croise
Whismeril 10603 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention > vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 17 oct. 2016 à 16:07
Salut Vb, et oui
atahriz 8 Messages postés dimanche 16 octobre 2016Date d'inscription 18 octobre 2016 Dernière intervention - 17 oct. 2016 à 17:33
merci, c'est resolu
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.