Remplir des texbox a partir d'un tableau

Résolu
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016 - 16 oct. 2016 à 19:53
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016 - 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
--------------------------------------------

5 réponses

Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 656
16 oct. 2016 à 20:08
Qu'est ce qui est long?
0
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
16 oct. 2016 à 20:37
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
0
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 656
16 oct. 2016 à 23:20
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.
0
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
17 oct. 2016 à 15:10
merci beaucoup pour votre aide
0
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
Modifié par atahriz le 17/10/2016 à 15:53
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)
0
vb95 Messages postés 3474 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 7 mai 2024 169
Modifié par vb95 le 17/10/2016 à 15:32
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 )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 656
17 oct. 2016 à 15:42
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.
0
vb95 Messages postés 3474 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 7 mai 2024 169
17 oct. 2016 à 15:51
Salut Whis : on se croise
0
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 656 > vb95 Messages postés 3474 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 7 mai 2024
17 oct. 2016 à 16:07
Salut Vb, et oui
0
atahriz Messages postés 8 Date d'inscription dimanche 16 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
17 oct. 2016 à 17:33
merci, c'est resolu
0
Rejoignez-nous