IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modifier une série de boutons ou de label dans une boucle


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut Modifier une série de boutons ou de label dans une boucle
    J'ai 48 boutons et label qui s'appelent button1, button2, ... et label1, label2, etc...
    J'aimerais faire une boucle, genre For Next et pouvoir modifier le texte du bon bouton ou label avec ça?
    J'utilise Visual Studio 2019. J'espère que ma question est assez clair.
    Les infos à mettre dans les .text viennent d'un datagridview, donc j'ai aussi besoin de choisir une ligne du datagrid à chaque fois.

    Merci de votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 323
    Par défaut
    Pour changer de nom de tous les buttons, voici quelque exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Button As Button In Me.Controls.OfType(Of Button)()
    next
    est si vous voulez changer un ou plusieurs buttons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Button As Button In Me.Controls.OfType(Of Button)()
                If Button.Name <> "Button1" AndAlso Button.Name <> "Button2" AndAlso Button.Name <> "Button4" Then
                    Button.Text = "OK"
                End If
            Next
    vous pouvez aussi remplacer button par aussi label.
    cordialement,

  3. #3
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut Éclaircissements
    Merci pour la réponse, malheureusement, il y a malentendu. Mon problème est plutôt que je dois faire une boucle dans laquelle je modifie le contenu .text du bouton ou du label à partir d'une database. Donc je dois faire les mêmes opérations sur chacun. Actuellement, j'utilise un Select Case dans une boucle For Next,
    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case (j)
         Case 1
              bouton1.text = datagridview..Rows(j - 1).Cells(0).Value.ToString
              label1.text = datagridview.Rows(j - 1).Cells(1).Value.ToString
         Case 2 
              bouton2.text = datagridview..Rows(j - 1).Cells(0).Value.ToString
              label2.text = datagridview.Rows(j - 1).Cells(1).Value.ToString
        Case 3 
              bouton3.text = datagridview..Rows(j - 1).Cells(0).Value.ToString
              label3.text = datagridview.Rows(j - 1).Cells(1).Value.ToString
    Donc je me demandais s'il y avait un moyen autre que le select case pour ça. Que je puisse utiliser le bouton1 et label1 puis le bouton2 et le label2 selon le J. Parce que comme je pourrais avoir jusqu'à 48 boutons, c'est contre productif de refaire la même affaire 48 fois.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Stocker les références à tes composants dans des collections et y accéder par leur indices.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Button> buttons = new List<Button>() { button1, button2, button3 };
    List<Label> labels = new List<Label>() { label1, label2, label3 };
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boutons[j - 1].text = datagridview.Rows(j - 1).Cells(0).Value.ToString
    labels[j - 1].text = datagridview.Rows(j - 1).Cells(1).Value.ToString

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Si dans ta base de données tu stock le nom du contrôle et la valeur du texte à afficher il te suffit de parcours le datagrid pour modifier le contrôle par son nom !

  6. #6
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Button> buttons = new List<Button>() { button1, button2, button3 };
    List<Label> labels = new List<Label>() { label1, label2, label3 };
    Ce type de déclaration ne fonctionne pas dans mon Visual Studio 2019. Je ne sais pas si c'est moi ou VB le problème dans ce cas-ci. j'ai ajouté le Public devant car ça ne voulait pas plus l'accepter.
    Nom : errors.jpg
Affichages : 897
Taille : 94,0 Ko
    Ce que j'ai besoin, c'est d'avoir une façon de choisir le bouton ou le label que je désire modifier. Sachant qu'ils portent tous le même nom sauf pour le chiffre à la fin, existe-t-il un moyen de dire que je veux appeler le "bouton" & i.ToString ?

    J'ai pensé le mettre dans ma base de données, mais comme l'ordre des infos est configurable, ce ne serait donc pas nécessairement toujours le même bouton.

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    appeler le "bouton" & i.ToString
    As tu fait l'essai ?
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    j'ai essayé de plusieurs façons, dont celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim btnNo As Integer = 18
            Dim monBtn As Button = "Button" & btnNo.ToString
            monBtn.Text = "My Button"

    j'obtiens ceci
    Erreur BC30311 Impossible de convertir une valeur de type 'String' en 'Button'.

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Citation Envoyé par khaymann007 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Button> buttons = new List<Button>() { button1, button2, button3 };
    List<Label> labels = new List<Label>() { label1, label2, label3 };
    Ce type de déclaration ne fonctionne pas dans mon Visual Studio 2019. Je ne sais pas si c'est moi ou VB le problème.
    C''est parce que c'est du C#.
    Je ne pensais pas que ce serait un problème de traduire en VB.Net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Dim buttons As List(Of Button) = New List(Of Button)() From {
            button1,
            button2,
            button3
        }
        Dim labels As List(Of Label) = New List(Of Label)() From {
            label1,
            label2,
            label3
        }
    Édit : ajout de la seconde partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boutons(j - 1).text = datagridview.Rows(j - 1).Cells(0).Value.ToString 
    label(j - 1).text = datagridview.Rows(j - 1).Cells(1).Value.ToString

  10. #10
    Membre expérimenté
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 457
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim buttons As List(Of Button) = New List(Of Button)()
    Non ?


    Après y'a les tuples en Visual basic apparemment... si ça peut servir.

    Aussi je crois que c'est possible en récupérant le container de récupérer boutons et cie. Il me semble l'avoir fait quand je générais dynamiquement des contrôles pour optimiser l'affichage (en c#/winform) car en cliquant tu pouvais grossir une section, afficher une partie supplémentaire etc... Il me semble qu'il fallait filtrer par contre. Par contre c'était pas avec un datagridview

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    bonjour,
    imaginons ta dataGrid colonnes 1 tu as le nom du control et en 2 le texte à afficher!

    Control Text
    label1 TOTO
    label2 TITI
    label3 TUTU
    button1 Start
    button2 Stop
    button3 Valider

  12. #12
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i = 0; i < datagridview.Rows.Count; i++)
        {
            this.controls($"bouton{(i + 1).tostring()}").text = datagridview.Rows(I).Cells(0).Value.ToString;
            this.controls($"label{(i + 1).tostring()}").text = datagridview.Rows(i).Cells(1).Value.ToString;
        }
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     For i As Integer = 0 To DataGridView.Rows.Count - 1
                Me.Controls($"bouton{(i + 1).ToString}").Text = DataGridView.Rows(i).Cells(0).Value.ToString
                Me.Controls($"label{(i + 1).ToString}").Text = DataGridView.Rows(i).Cells(1).Value.ToString
            Next

  13. #13
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    ceci me semblait prometteur, mais voici ce que j'ai comme erreur
    Nom : errors2.jpg
Affichages : 842
Taille : 56,8 Ko

  14. #14
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    attention i commence à 0 ja mis {(i + 1).ToString}

  15. #15
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    Dans mon cas, je débute à 1, mais ça ne semble pas être le problème, ça parle de -
    {"La référence d'objet n'est pas définie à une instance d'un objet."} System.NullReferenceException

  16. #16
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Postes le code complet de la boucle
    en tous les cas chez moi ça fonctionne

  17. #17
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Dim dt As New DataTable
            Dim j As Integer
            Dim nbRows As Integer
            Dim couleur As String
            Dim nom As String
            Dim montant As String
     
            'Dim btn As Button
            'Dim lbl As Label
            'Dim ctlName As String
     
     
            Try
                con.Open()
                sql = "Select Categorie.description,Categorie.total,Type.Code_Couleur from Categorie LEFT JOIN Type ON Categorie.type=Type.Type WHERE Categorie.Actif=True ORDER BY Categorie.Ordre"
                cmd.Connection = con
                cmd.CommandText = sql
                da.SelectCommand = cmd
     
                da.Fill(dt)
                ColGrdVw.DataSource = dt
                con.Close()
                ColGrdVw.Left = -400
     
                ColGrdVw.Visible = True
                nbRows = ColGrdVw.DisplayedRowCount(True)
                ColGrdVw.Visible = False
                con.Open()
                ListView1.Items.Clear()
     
                For j = 1 To nbRows
                    Dim item As New ListViewItem
     
                    nom = ColGrdVw.Rows(j - 1).Cells(0).Value.ToString
                    montant = ColGrdVw.Rows(j - 1).Cells(1).Value.ToString
                    couleur = ColGrdVw.Rows(j - 1).Cells(2).Value.ToString
     
                    Me.Controls($"btnBud{(j + 1).ToString}").Text = ColGrdVw.Rows(j + 1).Cells(0).Value.ToString
                    Me.Controls($"lblMontant{(j + 1).ToString}").Text = ColGrdVw.Rows(j + 1).Cells(1).Value.ToString
                Next j
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try

  18. #18
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    Je viens de l'essayer dans un projet vierge où je n'ai que 3 boutons et ça fonctionne bien.

    Dans mon vrai projet, ces boutons sont dans un groupbox, est-ce que ça peut être la cause? et si oui, que dois-je faire ?

  19. #19
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Imaginons que ton contrôle s'appel groupBox1 et bien tu remplace Me par groupBox1
    groupBox1.Controls($"lblMontant{(j + 1).ToString}").Text =

  20. #20
    Membre habitué
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : support technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2022
    Messages : 10
    Par défaut
    Un gros merci à tous de votre aide. Ça marche finalement. Je suis passé de 575 lignes à 10 pour la même séquence d'opérations.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modifier le texte des boutons d'une MsgBox
    Par Spani dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/08/2007, 14h51
  2. Modifier une boucle <<for>>
    Par Mataka dans le forum MATLAB
    Réponses: 22
    Dernier message: 31/05/2007, 08h20
  3. [FLASH 8] Changer label bouton dynamiquement dans une boucle
    Par Malau dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 16h55
  4. modifier une label dynamique
    Par zidenne dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/12/2005, 16h03
  5. Modifier une requête en fonction de boutons d'option
    Par JahRastafari dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo