2010-12-16 6 views
1

J'ai beaucoup cherché, vu quelques exemples mais ils ne fonctionnent pas au moins pour moi. Voici ce dont j'ai besoin: dans mon application, je dois utiliser des icônes PNG transparentes pour les barres d'outils ainsi que des représentations d'objets visuels, c'est-à-dire une icône 72x72 "page" qui peut être déplacée sur tous les éléments de la zone client. Pour le premier je pensais utiliser un bouton, mettre son BackImage sur le PNG transparent et mettre BackColor comme "transparent": ça ne marchera pas, le bouton montre toujours une couleur solide derrière. Comme pour le panneau, le même problème: je peux mettre un PNG transparent comme image de fond mais le contrôle ne semble jamais "transparent" là où le PNG a des zones transparentes. Je pense la même chose avec une image et tout autre contrôle permettant des arrière-plans d'image. Donc je suppose qu'il s'agit vraiment de rendre transparent le contexte d'un contrôle ... Des idées? Je ne me soucie pas si j'ai besoin de créer une sorte de "bouton d'image" ou de "panneau d'image" - quel que soit - pour avoir des boutons, des panneaux, etc. Aussi, s'il vous plaît noter, il s'agit de la transparence PNG, en utilisant le canal alpha, pixels non transparents, qui, à cet âge, aspire à mon humble avis pour les interfaces graphiques décent.C# transparent PNG pour boutons, panneaux ... comment?

Vive

litium

+0

plz Ajouter Image de sortie? –

Répondre

1

Ok j'ai trouvé le code suivant cinque travaux non seulement pour les panneaux, mais aussi pour les boutons et je pense que d'autres contrôles --except PictureBox:

public class TransparentPanel : Panel <==change to Button for instance, and works 
    { 
     Timer Wriggler = new Timer(); 
     public TransparentPanel() 
     { 
      Wriggler.Tick += new EventHandler(TickHandler); 
      this.Wriggler.Interval = 500; 
      this.Wriggler.Enabled = true; 
     } 
     protected void TickHandler(object sender, EventArgs e) 
     { 
      this.InvalidateEx(); 
     } 
     protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 
       return cp; 
      } 
     } 
     protected void InvalidateEx() 
     { 
      if (Parent == null) 
      { 
       return; 
      } 
      Rectangle rc = new Rectangle(this.Location, this.Size); 
      Parent.Invalidate(rc, true); 
     } 
     protected override void OnPaintBackground(PaintEventArgs pevent) 
     { 
      // Do not allow the background to be painted 
     } 
    } 

Works pour moi 100%! Ne semble pas fonctionner pour PictureBoxes.