C# / Windows FORM, Rendre un label transparent [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021
-
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
-
Bonjour,

Actuellement je crée un jeu d'échec. J'ai réalisé mon échiquier via des labels stocké dans un tableau de label (coordonnée X, Y pour une case A 8 par exemple).

Désormais, je souhaite afficher des pièces sur mon interface graphique.

Pour cela, j'ai vu deux solutions :

La première serait d'utiliser des images de pièces déjà existantes de les détourer (via un logiciel tel photoshop) et de les importer dans une picture box. J'ai essayé pour le roi blanc, et malgré le fait que l'image soit détouré lorsque je l'envoi sur discord par exemple, elle s'affiche avec un fond blanc sur mon interface graphique (voir lien ci dessous) :

https://www.noelshack.com/2021-05-4-1612432519-unknown.png


La seconde a été d'utilisé un label, d'utiliser l'unicode et de faire en sorte que le fond du label soit le meme que pour l'échiquier.
Ainsi, j'ai fais en sorte que mon label change de parent, puis, je lui ai défini son BackColor à "transparent".
Cependant, lorsque je fais ça (après l'avoir mis en avant via la méthode BringToFront), il n'apparait pas (et j'ai bien changé la couleur du texte à Black)..
            this.labelRoiBlanc.Parent = this.tabLabelCase[5, 5];
            this.labelRoiBlanc.BackColor = Color.Transparent;
            this.labelRoiBlanc.ForeColor = Color.Black;
            this.labelRoiBlanc.BringToFront();
            this.labelRoiBlanc.Text = "\x2654";



Si quelqu'un à une solution je suis preneur !

8 réponses

Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
La position c'est dans le repère du Parent.
Si en gros, tes picturebox qui font le damier font à peu près la taille des pièces, il faut qu'elle soit proche de 0, 0
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
Bonjour
Déjà les Labels ne sont pas faits pour cela .
L'idéal est d'utiliser des PictureBox pour les cases de l'échiquier et encore mieux d'utiliser une classe qui hérite de Picturebox pour gérer les cases de l'échiquier . Dans ce dernier cas on pourrait ainsi gérer la pièce sur la case .
Pour les images des pièces il faut utiliser des images avec une couleur de fond transparente ainsi seule la pièce apparaît sur la case .
Un exemple ici : https://codes-sources.commentcamarche.net/source/102779-echecs-avec-moteur-uci-32-bits
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Tout d'abord merci de ta réponse.
J'ai remplacé mes labels par des PictureBox avec des BackColor que je souhaitais.

Toujours le même soucis.
De plus, je suis d'un niveau pas très elevée en POO, et le programme que tu m'as envoyé et très complexe...

Sachant que ce projet est pour les cours, mon objectif est de réussir comme mon camarade et moi avons penser.
L'idée de l'image pour les pièces me parait intéressante, mais je n'arrive pas à ne pas avoir le fond transparent sur mes pièces (jai toujours le fond blanc par défaut)

Si tu as une idée ^^
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
Bonsoir

tout d'abord, même si c'est difficile à discerner pour un débutant, en C# on ne fait pas de POO.
On fait de la programmation objet, il n'y a que de l'objet, quand c'est orienté, il peut y avoir d'autres paradigmes.


Pour ton problème, j'ai rendu mon avatar transparent grace à ce site https://transparent.imageonline.co/fr/ (j'aurais pu mieux faire, mais j'ai fait vite).

Ensuite dans un formulaire au fond vert, j'ai mis deux controles, un noir et un blanc.
Puis à cheval sur ces 2 controles et un bout de formulaire, un picturebox avec backcolor transparent et l'image de mon avatar, voila ce que ça donne


On voit le fond vert à travers les controles noir et blanc, parce que le picturebox est transparent par rapport au formulaire.

Maintenant, j'aggrandi un peu (mais pas trop) le contrôle blanc (c'est un panel), je luis mets un fond rouge.

Je supprime le picturebox et j'en crée un nouveau par le code, mais cette fois je l'attache au panel
            Image wish = Image.FromFile("WhisTransparent.png");
            PictureBox p = new PictureBox();
            p.Parent = panel1;// c'est ça la ligne importante
            p.Image = wish;
            p.BackColor = Color.Transparent;
            p.Location = new Point(10, 10);
            p.Height = wish.Height;
            p.Width = wish.Width;
            p.BringToFront();




Mon panel n'est pas assez haut, donc mon avatar est tronqué, mais on voit bien le rouge au travers et le vert du formulaire.



Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Bonjour,
Merci de ta réponse détaillée Whismeril,

Tout d'abord, je ne savais pas pour le C# et la POO car en cours on a comme cours POO et on nous parle uniquement de C#.

J'avais déjà tout ce code, mais merci quand même, je vais essayer ton site, je te tiens au jus !

Bonne journée
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Et bien me revoilà,

J'ai upload mon image sur le site, j'ai téléchargé et j'ai effectué ce code :
            Image Test = Image.FromFile(@"d:\Users\utilisateur\Documents\IUT\S4\ER\Photo\test.png");
            PictureBox p = new PictureBox();
            p.Parent = this.tabImageCase[5, 5];
            p.Image = Test;
            p.BackColor = Color.Transparent;
            p.Location = new Point(120, 20);
            p.Width = 100;
            p.Height = 100;
            p.BringToFront();


Et pourtant, lors de mon exécution, rien..
Sachant que tabImageCase est un tableau de PictureBox, peut être que le soucis vient de là ...
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Merci beaucoup ça fonctionne !

Super aide vraiment !
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
De rien