J'ai essayé d'afficher une image qui a une bordure transparente comme arrière-plan d'un contrôle.Contrôle de dessin avec fond transparent
Malheureusement, la zone transparente crée un trou sous la forme de parent comme suit:
Dans l'image ci-dessus, la forme a un fond rouge que je l'avais espéré voir derrière mon contrôle les zones transparentes.
Le code j'est la suivante:
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
Cette classe est héritée d'un PictureBox parce que je besoin d'un contrôle qui implémente des événements OnMouseMove et OnMouseUp.
J'ai fait des recherches la plupart du jour sans succès tester des idées différentes, mais malheureusement, la plupart travaillent uniquement sur le cadre complet et non .Net CF.
Toutes les idées seraient grandement appréciées.
Wow, merci pour cela. Une explication extrêmement utile et détaillée. Vous avez certainement passé du temps sur le sujet. –
@ctacke Je suis arrivé avec une solution de transparence qui est très proche de la vôtre, et cela fonctionne aussi bien dans le concepteur que dans l'exécution. J'ai récemment réalisé que ma solution ne fonctionnerait pas lors de l'imbrication de Conteneur Contrôles car la fonction "Parent.Parent" ne fonctionne pas. J'ai essayé de basculer "Parent.Parent" à this.TopLevelControl, qui fonctionne à l'exécution mais pas au moment du design. Où avez-vous déjà trouvé une solution pour imbriquer des contrôles transparents à l'intérieur des contrôles Container tout en laissant le concepteur rendre votre contrôle transparent? –
J'ai renoncé même à essayer d'obtenir le support du concepteur pour mes commandes il y a des années. Cela n'a jamais été aussi important pour moi et était toujours fragile.Parfois cela fonctionnait, d'autres fois ça ne fonctionnait pas et je me retrouvais en train de brûler des jours sans vraiment faire quelque chose de productif, alors je ne m'occupe même plus du concepteur à moins de disposer les rectangles où vont les commandes. – ctacke