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

Résolu
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 11 oct. 2011 à 18:32
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 - 11 oct. 2011 à 22:13
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

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 oct. 2011 à 22:13
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
3
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 oct. 2011 à 19:13
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
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
11 oct. 2011 à 19:23
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.
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 oct. 2011 à 19:40
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
11 oct. 2011 à 19:53
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.
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
11 oct. 2011 à 20:16
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
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
11 oct. 2011 à 20:26
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.
0
Utilisateur anonyme
11 oct. 2011 à 20:48
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.
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
11 oct. 2011 à 21:09
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.
0