Passer une variable dans un system comme System.Drawing.Color

[Résolu]
Signaler
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
-
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
-
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.

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.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.

9 réponses

Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour,

Tu as trouvé un code VB6.
Tu es en VB.NET.

Dans ce cas, c'est plutôt du genre :
MaNvlePictBx=New PictureBox
Définitions des propriétés
Conteneur.Controls.Add(MaNvlePictBx)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour,

Pour lister les Controles, utilises un List(Of T), cela te sera plus pratique.

Si TabCoul est de type Color, pourquoi ne pas utiliser simplement le tableau, pourquoi le préfixer de System.Drawing.Color ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011

Tout d'abord merci pour la réponse.

Dans les 2 cas, pourriez-vous me donner un bout de code ? Par exemple mon tableau est déclaré comme suit : Dim TabCoul_SDC() As String {"AliceBlue", "AntiqueWhite".....}. Supposons que je le déclare en le typant color, est-ce comme ça : Dim TabCoul_SDC() As Color {"AliceBlue", "AntiqueWhite" ?

D'autre part, mes PictureBox s'appellent PictureBox1, PictureBox2, PictureBox3, ... jusqu'à 146. Comment les mettre dans une list(Of T) (j'y avais pensé en regardant l'aide mais je n'y suis pas parvenu). Et surtout, à supposé que ma list(Of T) fonctionne comment m'en servir ?

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour,

Dim TabCoul_SDC() As Color = {Color.AliceBlue, ...}

Ensuite, tu déclares :
Dim MaListe as New List(Of PictureBox)
MaListe.Add(PictureBox1)
...

Ou tu charges les PictureBox en dynamique.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011

HOOUUUU..... Merci...

Voilà, en deux lignes j'ai le code, bien sûr, mais j'ai compris ! (du moins, je crois...). Du coup System.Drawing.Color.TabCoul_SDC(12) sera recevable car TabCoul_SDC(12) est une Color. Alors qu'avant, TabCoul_SDC(12) était un String. Juste ?

Ensuite, quand vous dites 'Charger en dynamique', vous voulez dire sur la form. Avec une boucle ? J'y avais pensé. Il y a peu j'étais en VB 4.0 et j'ai toujours fait comme ça mais là je n'y arrive pas parce que, tout simplement, les controls PictureBox ont tous obligatoirement des noms différents.

Alors, si j'ai bien compris, on charge à la main la List(Of PictureBox) et du coup, après, on charge en dynamique avec MaListe(0), Maliste(12)... Juste ?

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour,

Recherches du coté de la création dynamique de contrôle, il y a quelques exemples.

Cela te simplifieras la gestion.

Conteneur.Controls.Add(MaNouvellePictureBox)
MaNouvellePictureBox est une nouvelle instance de la classe PictureBox.
Donc, c'est soit tu charges à partir de tes contrôles déjà créés, soit tu charges en dynamique en supprimant les PicturesBox déjà déclarées.

Sinon, à quoi te servent toutes ces PictureBox.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011

J'essaie de faire, pour l'utilisateur, un choix possible de couleurs pour tous les paramètres (fenêtre, boutons, etc...) or je me suis rendu compte que les couleurs proposées par la fenêtre 'Propriétés' (F4) et dans l'onglet System n'étaient pas reconnues par System.Drawing.Color.

Par exemple, j'avais choisi la couleur ControlDarkDark en BackColor de ma form (dans la boîte de Propriétés). Et bien, System.Drawing.Color ne le connait pas.

D'autre part, la boîte à couleur ne donne pas le nom des couleurs...

Conclusion, il faut une petite appli qui regroupe la couleur (PictureBox) et le nom, le tout accepté et reconnu par le System.Drawing.Color.

Mais en ce qui concerne votre réponse, comment dois-je procéder ? Par Google ou sur le site ? Je tape : création dynamique de contrôle et je regarde ce qui se passe ? Quel est votre conseil ?

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.

Bonsoir à tous les 2.

D'autre part, la boîte à couleur ne donne pas le nom des couleurs...


On peut énumérer les couleurs disponibles.
On obtient son nom et la couleur.
A tester avec une Listview.

ListView1.View = System.Windows.Forms.View.SmallIcon
For Each couleur As KnownColor In [Enum].GetValues(GetType(KnownColor))
    Dim macouleur As Color = Color.FromKnownColor(couleur)
    ListView1.Items.Add(macouleur.ToString)
    ListView1.Items(ListView1.Items.Count - 1).BackColor = macouleur
Next


Bonne prog.
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011

Merci banana32. Je vais essayer ça.

Je viens de trouver sur le site à "Comment charger des contrôles dynamiquement sans utiliser de 'Load'" le script suivant :

Dim WithEvents LedDyn As VB.PictureBox  ' déclaration d'un objet dynamique
Dim Leds(127) As PictureBox  ' déclaration d'un tableau de références

Dim i%
  
  For i = 0 To 127                      ' pour chaque picturebox
    Set LedDyn = Me.Controls.Add("vb.picturebox", "Led" + CStr(i))    ' création du contrôle avec un nom unique
    Set Leds(i) = LedDyn             ' création d'une référence à l'objet
    LedDyn.Top = 500                 ' paramétrage du contrôle créé
    LedDyn.Left = 500 + (i * 100)
    LedDyn.Height = 300
    LedDyn.Width = 75
    LedDyn.BorderStyle = 0
    LedDyn.Visible = True
  Next i

  For i = 0 To 127       ' démonstration de l'accès par index
    Leds(i).BackColor = RGB(0, i * 2, 0)  ' accéder aux contrôles par index
  Next i


J'ai du le corriger un peu parce que mon VB n'accepte pas 'vb.pictureBox' que j'ai donc transformé en PictureBox. Mais...

A la ligne :
Me.Controls.Add("vb.picturebox", "Led" + CStr(i))
,

en allant voir l'aide de Microsoft, je me suis apercu que l'on ne pouvait donner plus d'un paramètre à la fonctionn Controls.Add. J'ai donc écrit :

Me.Controls.Add(PictureBox)


et ça coine. Il me dit que PictureBox n'est pas un élément de System.Windows.Forms.Controls.

Je suis perdu...

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.