t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009
-
2 déc. 2008 à 10:46
cs_clairedelune
Messages postés5Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention14 avril 2009
-
14 avril 2009 à 10:20
Bonjour à tous,
Je viens vers vous car j'ai un soucis que je n'arrive pas à résoudre malgré mes recherches sur Internet :
J'essaie de créer un control custom qui possède deux états :
- Etat de départ : Le control n'est pas cliqué, il possède une image transparente ; [Jusque là pas de soucis, je vois bien, en fond, la form qui contient mon control]
- Etat cliqué : Mon control est cliqué et prend une couleur opaque (Ex : Bleu foncé). [Pas de soucis, ma transparence disparait, j'ai mon fond opaque]
Lorsque je relache mon control, il est censé revenir à la position initiale (Transparence de l'image + fond du form qui le contient). Cependant, il garde en mémoire, le fait qu'il avait une couleur bleu juste avant et me fait de la transparence sur cette couleur.
D'après mes recherches, c'est mon graphique qui contient toujours le bleu en arrière plan lorsqu'il retourne dans le paint. J'ai essayé d'utiliser la méthode Clear(Color) en mettant une couleur vide (Color.empty) mais dans ce cas, j'ai tjrs le fond bleu. Si je met un autre couleur, ca passe, mais je veux pas une autre couleur, je veux ce que j'ai en fond d'écran de ma form :)
Ma question est donc la suivante :
Comment faire pour supprimer le contenu complet de mon graphique avant de le redessiner ?
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009 3 déc. 2008 à 18:28
Hello,
Devant l'absence de réponse, j'ai continué à chercher une explication à mon problème. Voici des informations supplémentaires à travers un exemple simple et concrêt :
Je crée une Form et je lui ajoute un Control. Lorsque j'essaie de peindre le fond du Form, il me peint uniquement les parties où il n'a pas de controles !
C'est plutôt malin car le WinForm ne fait pas de choses inutiles. Cependant, si mon Control n'a pas de fond, je vais voir à travers le Form.
Un peu de code pour ceux qui adorent :)
public MyControl : Control{
// Mon controle
protected override OnPaintBackground(PaintEvenArgs e)
{
// Pas de fond !
}
}
static void Main()
{
// Creation de mes objets
Form f = new Form();
MyControl ctrl = new MyControl();
// Mise en forme du control
ctrl.Width = f.Width;
ctrl.Height = 100;
// Ajout de mon control
f.Controls.Add(ctrl);
Application.Run(this.window);
}
Si vous essayé de faire quelque chose comme cela, vous allez voir que :
- la forme s'est dessinée là ou il n'y avait pas de control ;
- on voit le menu d'accueil de windows mobile là ou les controles n'ont pas de fond d'écran...
Question : Comment dessiner derrière un control ?
(On peut mettre faire l'attachement du control dans une surcharge du Paint de la Form, mais cette réponse n'est pas valable :))
cs_clairedelune
Messages postés5Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention14 avril 2009 14 avril 2009 à 10:20
Bonjour toof,
tu as posté ton dernier message il y a si longtemps que je suppose que tu as certainement déjà trouvé une solution mais sait-on jamais ...
essais ceci :
dans le constructeur de ton control ajoute :
This.SetStyle(ControlStyles.UserPaint, True)
This.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
This.BackColor = Color.Transparent
ou l'équivalent en C# car je pratique surtout le VB
puis tu gères, comme tu l'as surement fait, les evénement MouseDown et MouseUp du control pour modifier la couleur de fond
On a beau courir, on revient toujours à la source .