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

Visual Studio Discussion :

VS2013 - Panel BackColor


Sujet :

Visual Studio

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut VS2013 - Panel BackColor
    Bonjour,

    j'ai créé une FORM contenant 12 panels.
    je tente de modifier dynamiquement la couleur d'un PANEL suivant une valeur issue d'une requête SQL. Si mon SQL me retourne 1, je dois coloriser le panel "P1", si ma requette me retourne 2, 4, 7, je dois coloriser mes panel 2, 4 et 7, etc..
    Dans mon exemple, la table de mon Dataset [DS.table] contient 2 valeurs suite à ma requête SQL :
    Valeurs : 1 et 7
    Donc je devrait voir les panel P1 et P7 devenir tout "Firebrick"

    Puis je crée ma variable P as Panel pour ensuite lui associer la première valeur de mon DS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim mJOUR_PERSO_ID As String = DS.Tables(0).Rows(i).Item("JOUR_PERSO_ID").ToString
    Enfin, je vérifie ma viariable "P" afin de savoir si elle est null ou non.
    Avec la boucle, la premiere fois mon P devrait être = à "P1" puis à "P7"

    Donc je modifie mon backcolor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     P.BackColor = Color.Firebrick
    Malheuresement, je dois louper quelque chose puisque ma variable P reste toujours "NOTHING"

    Auriez vous une idée ? D'ou vient mon erreur ? Ma méthode est elle bonne ? Une autre idée pour faire cela ?

    MERCI

    Voici le code en entier :
    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
     
    For i As Integer = 0 To DS.Tables(0).Rows.Count - 1
                    Dim mJOUR_PERSO_ID As String = DS.Tables(0).Rows(i).Item("JOUR_PERSO_ID").ToString
     
                    'Panel dynamique
                    Dim P As Panel
                    P = CType(Me.Controls("P" & mJOUR_PERSO_ID), Panel)
     
                    'Recherche si Panel existe
                    Dim myControl1 As Control = P
                    If Not myControl1 Is Nothing Then
                        P.BackColor = Color.Firebrick
                    End If
     
                Next (i)

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Est-tu sûr que '"P" & mJOUR_PERSO_ID' retourne bien "P1" et "P7"? il n'y a pas des espaces ou autres en plus? Si oui, est-ce que tu les retrouves bien dans Me.Controls (ajoute un espion pour vérifier s'ils apparaissent dans la liste des contrôles)

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    Tu as bien ciblé le problème, '"P" & mJOUR_PERSO_ID' ne me retourne pas "P1" ou "P7" !!

    Par contre "mJour_Perso_ID" a bien la valeur 1 puis 7 quand j'éxécute en mode pas à pas.. (voir pièce jointe)
    Et je ne vois pas pourquoi ma variable "P" ne prend pas le "CType(Me.Controls("P" & mJOUR_PERSO_ID), Panel)"
    Images attachées Images attachées  

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    l'espion..
    Images attachées Images attachées  

  5. #5
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par guilld Voir le message
    Et je ne vois pas pourquoi ma variable "P" ne prend pas le "CType(Me.Controls("P" & mJOUR_PERSO_ID), Panel)"
    Essaye sans le cast, en faisant juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim P = Me.Controls("P" & mJOUR_PERSO_ID.Trim()) 'Trim() permet de supprimer les espaces en début et fin de chaine.
    Ensuite, si P <> Nothing, regarde s'il s'agit bien d'un Panel.

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    Le résultat est identique !
    Depuis mon espion :
    P Nothing System.Windows.Forms.Panel

  7. #7
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Hum tu executes cette action à quelle moment? Car si tu n'as pas explicitement indiqué le type de Me.Controls("P" & mJOUR_PERSO_ID.Trim()) et qu'il dit que c'est un Panel alors il l'a bien trouvé mais que tu exécutes ton code avant le InitializeComponents de ta form

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    c'est le second appel de fonction depuis mon LOAD.
    Avant cela, j'execute une requete SQL pour remplir un datagriview.

    Donc je dirai que tout est dans le bon ordre.
    Quant au "InitializeComponents " je ne l'utilise pas puisque que mes PANELs ont été créés par designer et non pas code.
    Je pense que je n'ai pas à avoir à l'initialiser.

  9. #9
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par guilld Voir le message
    Quant au "InitializeComponents " je ne l'utilise pas puisque que mes PANELs ont été créés par designer et non pas code.
    Je pense que je n'ai pas à avoir à l'initialiser.
    Non effectivement. Pour info, le InitializeComponent apparaît automatiquement lorsque l'on définit le constructeur sur le fichier de code du formulaire. Ainsi, si tu avais fait ce traitement dans le constructeur avant le InitializeComponent, ça aurait été normal que le contrôle soit null.


    Du coup tu confirmes que, suite à cette ligne là : Dim P = Me.Controls("P" & mJOUR_PERSO_ID.Trim()), P est Nothing? Je dis bien suite, il faut que l'instruction soit passée pour que P soit affecté.

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    Je viens de trouver une solution.. mais je ne comprends pas pourquoi ca marche..

    il faut que je dise que mes 12 Panel sont eux même un autre Panel.
    Du coup si je sors mes 12 panel de celui qui les contient alors ca fonctionne.
    Si je remets les 12 panels dans le grand Panel alors ca fonctionne plus..

    je pense donc que le fait que les 12 soient contenu dans un autre fait que cela ne fonctionne pas..

  11. #11
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par guilld Voir le message
    je pense donc que le fait que les 12 soient contenu dans un autre fait que cela ne fonctionne pas..
    Ah, il fallait le préciser plus tôt ! Quand tu fais "Me.Controls" depuis ton formulaire, tu recherches les contrôles enfants de ton formulaire. Ceux-ci peuvent très bien être conteneurs d'autres contrôles. C'est un peu le même principe que la relation parent/enfant dans la vrais vie :

    Tu es le fils de ton père qui lui est le fils de son père. Cela ne veut pas pour autant dire que tu est le fils du père de ton père. Ou alors il y a un problème

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    Oups ! Si j'avais su ca, j'aurai pas posté cette question
    Donc du coup ? on fais comment alors dans ce cas ?

    Parce que j'ai d'autre dans le même cas..

  13. #13
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Me.Controls(nomDuPanelParent).Controls("P" & mJOUR_PERSO_ID.Trim())

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    arrf..! je vais tester ca..
    Merci

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

Discussions similaires

  1. comment acceder a un component lui meme dans un panel
    Par mimosa7 dans le forum Composants
    Réponses: 2
    Dernier message: 16/11/2003, 23h02
  2. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  3. Comment créer un bitmap à partir d'un panel ?
    Par calou34 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/08/2003, 15h06
  4. Comment faire un panel non rectangulaire?
    Par grincheux dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/05/2003, 15h47
  5. Prob, images, Panels, et form.
    Par CaptainChoc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 10/05/2003, 10h08

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