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 :

Comment passer une variable dans un system comme le System.Drawing.Color [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut Comment passer une variable dans un system comme le System.Drawing.Color
    Bonjour à tous,

    J'avance petit à petit avec VB 2010 mais je pédale...

    J'ai déclaré et rempli un tableau (TabCoul) des 146 couleurs du System.Drawing.Color.

    Et maintenant, avec une boucle for, je voudrais remplir des pictureBox de la couleur de l'élément du tableau. Un truc simple, quoi... A priori bien sûr... Mais je n'y arrive pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PictureBox1.BackColor = System.Drawing.Color.TabCoul(0) 
    PictureBox2.BackColor = System.Drawing.Color.TabCoul(1) 
    PictureBox3.BackColor = System.Drawing.Color.TabCoul(2)
    Il me dit que TabCoul(2) n'est pas un élément du System.Drawing.Color. Je m'en doutais un peu mais je ne lui envoie pas TabCoul(0), je lui envoie "AliceBlue" qui lui est un élément de System.Drawing.Color. Eh bien non ! Pas moyen.

    Quelqu'un pourrait-il m'aider (avec un bout d'explication...) ?

    Accessoirement : lorsque l'on crée des PictureBox on ne peut pas donner le même nom à deux PictureBox. Sinon, toutes ont le même nom, on les indexe sur le Tag (0,1,2,3...) et pour la boucle vue plus haut c'est du velours.
    Y aurait-t-il un truc pour mettre tous mes PicturesBox dans une boucle et éviter ainsi une longue et fastidieuse énumération ?

    D'avance merci pour toutes les bonnes volontés.

    Cordialement,

    Whombat.

  2. #2
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut
    Citation Envoyé par Whombat Voir le message
    Bonjour à tous,

    J'avance petit à petit avec VB 2010 mais je pédale...

    J'ai déclaré et rempli un tableau (TabCoul) des 146 couleurs du System.Drawing.Color.

    Et maintenant, avec une boucle for, je voudrais remplir des pictureBox de la couleur de l'élément du tableau. Un truc simple, quoi... A priori bien sûr... Mais je n'y arrive pas !

    PictureBox1.BackColor = System.Drawing.Color.TabCoul(0)
    PictureBox2.BackColor = System.Drawing.Color.TabCoul(1)
    PictureBox3.BackColor = System.Drawing.Color.TabCoul(2)

    Il me dit que TabCoul(2) n'est pas un élément du System.Drawing.Color. Je m'en doutais un peu mais je ne lui envoie pas TabCoul(0), je lui envoie "AliceBlue" qui lui est un élément de System.Drawing.Color. Eh bien non ! Pas moyen.
    Ton tableau de System.Drawing.Color n'est pas déclaré dans le classe Color, mais dans ta classe, tu dois faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PictureBox1.BackColor = TabCoul(0) 
    PictureBox2.BackColor = TabCoul(1) 
    PictureBox3.BackColor = TabCoul(2)
    Citation Envoyé par Whombat Voir le message
    Bonjour à tous,

    Accessoirement : lorsque l'on crée des PictureBox on ne peut pas donner le même nom à deux PictureBox. Sinon, toutes ont le même nom, on les indexe sur le Tag (0,1,2,3...) et pour la boucle vue plus haut c'est du velours.
    Y aurait-t-il un truc pour mettre tous mes PicturesBox dans une boucle et éviter ainsi une longue et fastidieuse énumération ?
    Tu peux les mettre dans un tableau et itérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each Pb as PictureBox in new PictureBox(){pb1,pb2,pb3}
    ....
    Next
    Tu peux aussi récupérer les composants de ton formulaire qui sont des pictures box.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Components.OfType<PictureBox>()

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    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 172
    Points : 25 112
    Points
    25 112
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut
    Tout d'abord, merci de ta réponse.

    Si j'ai bien compris (je débute en Net...) dans la 1ere option il me faut mettre, à la place de pb1,pb2,pb3 ce qui est chez moi c'est à dire PictureBox1, PictureBox2, PictureBox3,... jusqu'à 146 ?

    Ca va être pénible mais si il faut, il faut...

    Mais pour la seconde solution, une fois avoir fait Components.OfType<PictureBox>()

    comment je m'en sert ?

    Et merci pour ton indulgence et ta patience.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    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 172
    Points : 25 112
    Points
    25 112
    Par défaut
    moi je ne vais pas être indulgent, mais il faut apprendre avant de coder

    parce que réussir à écrire System.Drawing.Color.TabCoul(0) est une absurdité
    poser et nommer 146 picturebox aussi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut
    Vous m'avez fait mal.

    Je me rends compte que le monde change. J'ai, durant 35 ans, enseigné la chirurgie et la neurologie. Je ne m'adressais pas à des étudiants avec un tel mépris. L'idée même ne me serait pas venue.

    Il doit y avoir maintenant ceux qui ont des bases de programmation objet, scolaires ou parce que aidés par de bons pédagogues, et les autres, qui d'ailleurs n'ont rien à faire sur ce site.

    Un conseil, néanmoins, pour le prochain contre lequel vous voudrez vider un peu de fiel : si vous vous permettez d'être aussi définitif dans votre jugement sur une technique X, donnez la bonne solution en la commentant. D'une part le message passera et la leçon (le cours) sera intégré et d'autre part, vous aurez créé une réponse pour tous ceux qui fouillent d'abord avant de poser une question. Ca leur évitera de se faire insulter.

    Pour moi, vous m'avez découragé. Je me rends compte que je ne suis plus d'un âge où on peut parler avec un 'technicien' si on n'est pas soit-même de la partie.

    Dommage !

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    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 172
    Points : 25 112
    Points
    25 112
    Par défaut
    désolé de vous avoir blessé, le but n'était pas là
    et une fois de plus on me reproche mes posts ... le problème est surement que je réponds à un avatar inconnu au lieu d'une personne (du moins en partie)

    néanmoins je pourrais persister sur le fond, le cours donné en lien permet en une 20aine d'heure de progresser énormément
    de plus ce forum précise que c'est un forum de professionnels, que les débutants et étudiants y sont bien entendu acceptés mais pas pour qu'on code à leur place
    et donc je réponds à des professionnels dont c'est le métier, avec des bases, or ce n'est pas toujours le cas
    un des forces de ce forum (et la plus grande partie de mes posts est plus dans ce sens) est de trouver à plusieurs des solutions techniques à des problème d'un niveau plus élevé

    ignorez donc mon message et acceptez mes excuses
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut
    Dont acte

  9. #9
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour Whombat
    et Pol63
    Bon comme tu es debutant par quoi commencer ?la 1ere ou la derniere derniere question.
    Voila je commence par les couleurs .
    Tu as 2 facons de gerer un tableau de couleurs :
    -soit par un tableau de variable de type String tu lui affecte des noms tout simplement "Red","YellowGreen" etc.......
    -soit par un tableau de variable de type Color et la tui affecte des "color" c.à.d "Color.Red","Color.YellowGreen" etc......la difference c'est dans l'affectation....
    Tes deboires viennent de cette confusion des types .....c'est comme un neurochirgien qui ferait des confusions dans le traitement de "nevropathies" de "type different". Soit mais pour illustrer il faut passer à la table d'operation c'est mieux .Voici la reponse à ton dilemne .Prends un form ,ajoute 2 boutons et 6 pictureboxes(3 pour le 1er bouton et 3 pour le second bouton) et colle le

    code exemple à coller dans un Form appelee Form1 et executer :
    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
     
    Public Class Form1
    	'Ton Tabcoul est du type Color
    	Private TabCoul(2) As Color
    	Private TabNomCoul(2) As String
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    		'On affecte à notre tabcoul des des valeur type Color
    		TabCoul(0) = Color.Aquamarine
    		TabCoul(1) = Color.Red
    		TabCoul(2) = Color.YellowGreen
    		'PictureBox.BackColor exige valeur de type Color.
    		'notre TabCoul est meme type.c'est bon. 
    		PictureBox1.BackColor = TabCoul(0)
    		PictureBox2.BackColor = TabCoul(1)
    		PictureBox3.BackColor = TabCoul(2)
     
    	End Sub
     
    	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    		'On affecte à notre tabcoul des  valeur type string
    		TabNomCoul(0) = "Aquamarine"
    		TabNomCoul(1) = "Red"
    		TabNomCoul(2) = "YellowGreen"
    		'PictureBox.BackColor exige valeur de type Color.
    		'C'est embetant il faut passer la fonction Color.FromName(string)
    		'qui founrit un type Color quand on lui donne un nom de couleur
    		PictureBox4.BackColor = Color.FromName(TabNomCoul(0))
    		PictureBox5.BackColor = Color.FromName(TabNomCoul(1))
    		PictureBox6.BackColor = Color.FromName(TabNomCoul(2))
    	End Sub
    End Class
    Apres ca venons-en à ta 2eme question ...Elle exige plus de pre-quis comme bien dit par Pol63 mais il faut toujours se battre avec cette diabolique machine au debut ...qui nous incite ainsi à lire.....par la suite comme l'as dit Pol63...
    J'espere que mon code t'incitera à regader ta boite à outils concernant le controle FlowLayoutPanel.........
    Voici comment on ajoute par code 10 ou 1000 PictuireBoxes si tu veux ...Relis bien ce code
    L'idee principale qui est dedans n'est pas difficile à comprendre:
    *chaque controle contenu dans un autre est fils de celui-ci(child control).
    *chaque parent garde une liste de ses enfants dans la collection Controls...
    Dans cet exemple l'ancetre ultime c'est Form3 (designe Me)....
    -le FlowLayoutPanel est le fils du Form..
    -les picturesBoxes les enfants du FlowLayoutPanel....
    C' est un arbre genealogique.........quoi...............
    code exemple à coller dans un Form appelee Form2 executer :
    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
     
     
    Public Class Form2
    	'declare une variable picturebox
    	Private WithEvents myPictureBox As PictureBox
    	'declare une variable FlowLayoutPanel
    	Private WithEvents myFlowLayoutPanel As FlowLayoutPanel
    	Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    		'initialise ...tiens voila un nouveau FlowLayoutPanel
    		myFlowLayoutPanel = New FlowLayoutPanel
    		'Remplira touT le Forme
    		myFlowLayoutPanel.Dock = DockStyle.Fill
    		'Scrollera si notre fenetre n'est pas assez grande 
    		'ou bien s'il y  a beaucoup d'image
    		myFlowLayoutPanel.AutoScroll = True
    		'Dans la boucle on initialise chaque picturebox ..tiens en voila un...
    		For i As Integer = 1 To 10
    			myPictureBox = New PictureBox
    			'on le nomme +indice i => "pic1,pic2.....etc
    			myPictureBox.Name = "Pic" & (i + 1).ToString
    			myPictureBox.BackColor = Color.YellowGreen
    			myPictureBox.Size = New Size(100, 100)
    			'Ajoute chaque PictureBox comme Control Enfant de mon FlowLayoutPanel
    			Me.myFlowLayoutPanel.Controls.Add(myPictureBox)
    		Next
    		'Ajoute le FlowLayoutPanel lui-meme  comme Control Enfant de Forme Form3
    		Me.Controls.Add(myFlowLayoutPanel)
    		Me.Refresh()
    	End Sub
    End Class
    En esperant que tu reviendras avec des questions plus poussees.....
    bon code....
    "Seigneur guide nos pas pour ne pas decourager un debutant et lui donner le gout de la science" informatique......
    (par Ibn Khaldoun sociologue et Philosophe Maghrebin -1332).....

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut
    Merci infiniment Mabrouki.

    Je suis débutant mais j'ai bien étudié VB 2010, avec ma tête et mes moyens s'entend (le tuto de Monsieur Lassere (Ortho?) entre autres). J'étais un amateur éclairé en VB 4.0 Pro. Ça change !

    Lorsque je passe par des sentiers plus ou moins orthodoxes c'est que, dans ce que j'avais compris et aurait dû être nickel, je coinçais.

    Votre script (vos deux scripts) je les ai compris sans soucis. A part un détail, mais ce ne doit être qu'un détail :pourquoi passer par un FlowLayoutPanel et non pas gérer cela sur la form directement ? Pour éviter les calcul de location ? Ou est-ce encore plus subtil ?

    Dans tous les cas, re-merci infiniment.

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    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 172
    Points : 25 112
    Points
    25 112
    Par défaut
    Citation Envoyé par Whombat Voir le message
    pourquoi passer par un FlowLayoutPanel et non pas gérer cela sur la form directement ? Pour éviter les calcul de location ? Ou est-ce encore plus subtil ?
    vb.net est un langage de haut niveau, à savoir des milliers (millions ?) de choses sont incluses dans le framework pour que le développeur ait le moins de chose à écrire
    le flowlayoutpanel s'occupe de pas mal de choses, en mettant des picturebox dedans, il va les mettre les uns à coté des autres, arrivé au bout, il va aller à la ligne tout seul, arrivé en bas il va mettre un ascenseur tout seul (enfin presque, voir autoscroll)
    et si on change la taille du form et du flowlayoutpanel, les picturebox vont se déplacer automatiquement pour garder ce principe
    donc oui c'est pour éviter de se fatiguer à gérer le positionnement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Points : 66
    Points
    66
    Par défaut
    J'avais vu le composant avec le Coach de Microsoft mais c'était effectivement survolé. J'ai réussi à faire ce que je voulais, nickel, grâce à un tuyau que m'a apporté votre script.

    Je vous remercie encore de votre aide. Il y a un truc que j'ai découvert (un autre...) c'est cette fonction : PictureBox4.BackColor = Color.FromName(TabNomCoul(0))
    Je suppose que FromName est une methode de l'objet Color mais j'ai dû passer dessus sans la voir dans le Library de Microsoft parce que c'est exactement ce que je cherchais. Je vais donc aller me renseigner, me former, sur cet objet color et ses possibilités.

    Merci encore pour tout.

    Très cordialement.

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

Discussions similaires

  1. Comment passer une variable PHP dans une fonction A/S
    Par TakingCTRL dans le forum Flash/Flex
    Réponses: 1
    Dernier message: 28/10/2012, 09h54
  2. [WD-2003] Comment passer une variable dans un Chercher/Remplacer?
    Par Souriane dans le forum VBA Word
    Réponses: 3
    Dernier message: 12/07/2010, 15h11
  3. Comment passer une variable PHP dans une Alert
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 25/01/2009, 18h53
  4. Réponses: 4
    Dernier message: 28/07/2007, 23h45
  5. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40

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