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 couleur via SUB [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut Modifier une couleur via SUB
    Bonjour, bonsoir,

    C'est de nouveau moi avec mes questions bêtes et chiantes

    Alors pour simplifier un peut mon bordel de code, j'ai un soucis de type de variable, voici les 2 lignes de code qui vont avec ma sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If TB_IngBD.Text = "" Then
                                  '(la TB qui doit changer de couleur , le texte de la MsgBox)
                VerifEtCouleur("TB_IngBD.BackColor", "Veuillez remplir le Nom de l'ingrédient !")
    end if
    
    
    
    Sub VerifEtCouleur(ByVal ControlVar As ???  , ByVal TextVar As String)
            MsgBox(TextVar, 48, "Erreur")
           ControlVar = Color.Firebrick
    End Sub
    Dans la sub je ne sais pas du tout quel type donner a ma variable ControlVar j'ai essayer un peut tout les types différents.... Avec plusieurs modification dans l'appel du sub et pas mal d'autre modif mais rien n'y fait pourtant je suis sur que c'est juste un truc tout bête...mais après un bon bout de temps passer dessus et des recherches sur internet infructueusement je suis obligé de demander votre aide... Alors si quelqu'un aurais une solution à mon problème ce serrai super, merci d'avance

    Ah oui, j'oubliais le principal, l'erreur viens toujours de la ligne que j'ai souligné en me disant que le type color ne peut pas être converti en le type que j’ai choisis. (les ??? sont bien sur pour l'illustration ^^)

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si tu en doutais, je confirmes que tu as écris n'importe quoi

    tu peux passer une instance à une sub (TB_IngBD) par contre c'est à elle de savoir que c'est backcolor qu'il faut changer (ou alors il faudrait lui passer le nom de la propriété si tu veux pouvoir modifier autre chose que backcolor mais ca va complexifier le code)

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ControlVar.backcolor = Color.Firebrick
    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VerifEtCouleur(TB_IngBD,"blabla")
    "TB_IngBD.BackColor" est un string, à partir de ça ce n'est pas simple de faire quelque chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Yes super merci! j'avais essayer une possibilité qui était très très proche de celle si mais qui n'était pas identique, du coup j'avais toujours encore mon erreur...

    Je remet juste le code tel que je l'avais mis plus haut avec les modifications au cas ou quelqu'un aurait le problème que moi (même si ton explication était très bien et complète Pol63 )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If TB_IngBD.Text = "" Then
                VerifEtCouleur(TB_IngBD, "Veuillez remplir le Nom de l'ingrédient !")
    End If
     
     
    Sub VerifEtCouleur(ByVal ControlVar As Control, ByVal TextVar As String)
            MsgBox(TextVar, 48, "Erreur")
            ControlVar.BackColor = Color.Firebrick
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    J'ai maintenant un problème avec une de mes boucle, qui m'indique "Une exception non gérée du type 'System.NullReferenceException' s'est produite "

    tout le code fonctionne bien sauf la fameuse ligne ci dessous, les 5 TB existe bien sous le nom TB_IngNomVnIng1 à TB_IngNomVnIng5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls("TB_IngNomVnIng" + NBING.ToString).BackColor = Color.White
    Auriez vous une idée de où pourrai venir mon problème ?

    et voici le code plus large

    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
    TB_IngBD.BackColor = Color.White
            CB_REF.BackColor = Color.White
            For NBING As Integer = 1 To 5
                Controls("TB_IngNomVnIng" + NBING.ToString).BackColor = Color.White
            Next
     
            If TB_IngBD.Text = "" Then
                VerifEtCouleur(TB_IngBD, "Veuillez remplir le Nom de l'ingrédient !")
            ElseIf CB_REF.Text = "" Then
                VerifEtCouleur(CB_REF, "Veuillez remplir l'Unité de Référence !")
            ElseIf TB_IngNomVnIng1.Text = "" Then
                VerifEtCouleur(TB_IngNomVnIng1, "Veuillez remplir le nombre l'Unité de Référence !")
            ElseIf TB_IngNomVnIng2.Text = "" Then
                VerifEtCouleur(TB_IngNomVnIng2, "Veuillez remplir le nombre de Calories !")
            ElseIf TB_IngNomVnIng3.Text = "" Then
                VerifEtCouleur(TB_IngNomVnIng3, "Veuillez remplir le nombre de Lipides !")
            ElseIf TB_IngNomVnIng4.Text = "" Then
                VerifEtCouleur(TB_IngNomVnIng4, "Veuillez remplir le nombre de Glucides !")
            ElseIf TB_IngNomVnIng5.Text = "" Then
                VerifEtCouleur(TB_IngNomVnIng5, "Veuillez remplir le nombre de Protéine !")
            Else
                If ExisteSection(EmplacementVARING, TB_IngBD.Text) Then
                    MsgBox(TB_IngBD.Text + " existe déja !", 16, "Erreur")
                    Exit Sub
                Else
                    SetSection(EmplacementVARING, TB_IngBD.Text, "test")
                End If
            End If

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut apprendre à débugger
    F9 point d'arret
    F10 / F11 avancer d'une ligne (sans ou en rentrant dans les sous membres)
    la souris sur une variable affiche le contenu
    shift+F9 permet de voir le contenu d'une expression

    quand ca plante ca t'amène à la ligne qui plante, et là aussi tu peux tester le code que tu as écris en détail (shift f9, espions, variables locales ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Même, impossible de trouver ce qui me fait cette fameuse erreur, cette erreur viens quand

    "La plupart du temps cela veut dire qu'on utilise un membre d'un Objet alors qu'on n'a pas instancié cet objet.
    Il y a bien une Classe, mais pas d'objet instancié à partir de cette Classe, on veut utiliser un membre de la Classe alors qu'on ne peut utiliser un membre que sur une instance."

    source: http://plasserre.developpez.com/cour...?page=debogage

    Mais selon moi et les testes que j'ai fait tout est correctement initialisé (pourtant l'erreur reste donc il y en a forcément encore une ..), je n'ai donc aucune idée de l'erreur que j'ai faite, je fait donc appel à votre aide

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut décomposer
    la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls("TB_IngNomVnIng" + NBING.ToString).BackColor = Color.White
    il va évaluer color.white, ca existe pas de problème
    ensuite il va évaluer "TB_IngNomVnIng" + NBING.ToString, ca fait un string pas de problème non plus
    ensuite il évalue Controls("TB_IngNomVnIng" + NBING.ToString)
    là il cherche un controle avec ce nom, s'il n'en trouve pas il retourne nothing


    en débuggage en part du plus large et on affine
    tu aurais fait shift + F9 en ayant séléctionné Controls("TB_IngNomVnIng" + NBING.ToString) il t'aurait dit que ca valait nothing et tu aurais trouvé la source du problème
    après tu aurais fais shift + F9 sur "TB_IngNomVnIng" + NBING.ToString (ou juste regarder ce que valait NBING ca suffit dans ce cas simple) pour récupérer le nom que ton code cherche
    ensuite tu vas voir sur le form si ce controle existe bien (tu as peut oublié d'en nommé un ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Controls("TB_IngNomVnIng" + NB.ToString) donne bien Nothing
    "TB_IngNomVnIng" + NB.ToString donne bien "TB_IngNomVnIng1"

    l'erreur ce produit quand NB = 1 et aussi quand NB = 2 (j'ai pas fait de test pour NB à plus de 2)

    Mais mes 6 TB nommé TB_IngNomVnIng1 jusqu'a TB_IngNomVnIng6 existe bien et sur la même form que mon code.... je ne trouve donc toujours pas l'origine de mon problème

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    S'ils sont sur un panel ou tout autre container c'est sur ce container qu'il faut chercher et non sur le form
    Monpanel.controls(nom)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    S'ils sont sur un panel ou tout autre container c'est sur ce container qu'il faut chercher et non sur le form
    Monpanel.controls(nom)
    Yes effectivement Merci, c'est bien à cause du GroupeBox que j'avais le message d'erreur, la question que je me pose alors est pourquoi quand j'écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CB_REF.BackColor = Color.White"
    il trouve directement la CB dans le GroupBox

    Alors que quand j'écrit ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For NBING As Integer = 1 To 5
                GroupBox5.Controls("TB_IngNomVnIng" + NBING.ToString).BackColor = Color.White
            Next
    Je doit spécifié que ma TB est dans le GroupBox ?

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    parce que quand tu poses un controle (peu importe sur quoi) ca créé une variable pour ta form

    alors que la propriété controls de chaque controle ne contient que les enfants directs
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Ok merci, j'ai une autre petite question, est ce que c'est possible de modifier la même valeur sur plusieurs contrôle en une même ligne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            TB_IngBD.BackColor = Color.White
            CB_REF.BackColor = Color.White
    Donc de transformer mes 2 lignes de code en une seul ( comme pour les variables par exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var1, var2, var3, var4, var5 = "un truc"

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    non

    si tu as plusieurs trucs toujours les mêmes à plusieurs endroits du code, tu peux les mettre dans un list(of ) et faire un for each
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    non

    si tu as plusieurs trucs toujours les mêmes à plusieurs endroits du code, tu peux les mettre dans un list(of ) et faire un for each
    Ok merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LibreOffice][Texte] Modifier une couleur de texte via une macro
    Par sylvcod dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 18/06/2014, 12h18
  2. Access : Modifier une table via VB
    Par Tsuna78 dans le forum Access
    Réponses: 11
    Dernier message: 06/03/2007, 14h07
  3. Modifier une couleur dans un sprite
    Par matteli dans le forum DirectX
    Réponses: 2
    Dernier message: 30/12/2006, 13h42
  4. Modifier une couleur
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 12/04/2006, 12h54
  5. Réponses: 2
    Dernier message: 24/11/2005, 11h46

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