Backcolor et transparence

Résolu
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 22 nov. 2008 à 19:32
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 26 nov. 2008 à 14:27
Bonsoir,


J'ai fait un usercontrol sur lequel je dessine sur une petite partie seulement grâce à lévènement Onpaint. Le reste de mon composant je lui met la couleur Transparent en BackColor ce qui fait que la partie où je ne dessine pas est transparente. Après...lorque j'utilise ce composant sur un formulaire, je dois le mettre à cheval sur un autre composant (ex: PictureBox avec un fond bleu). Mon problême c'est que la transparence montre la couleur de fond du formulaire et non le fond de la picturebox. Si quelqu'un pourrait me donner un code ou alors un peu d'aide je le remercierai bien. A bientot.


La connaissance est la plus grande des richesses.

4 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 nov. 2008 à 14:27
Modifié pour un UserControl, tu peux voir le résultat >ici<

private class MyControl : UserControl
{
    public MyControl( ) : base( )
    {
        this.SetStyle( ControlStyles.UserPaint |
            ControlStyles.AllPaintingInWmPaint, true );
    }


    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT;
            return cp;
        }
    }


    protected override void OnPaintBackground( PaintEventArgs args )
    {
        //base.OnPaintBackground( args );


        Graphics g = args.Graphics;
        Rectangle r = this.ClientRectangle;
        g.DrawRectangle( Pens.Black, new Rectangle( 0, 0, r.Width - 1, r.Height - 1  ) );
        g.FillRectangle( new SolidBrush( Color.FromArgb( 128, Color.Red ) ), r );
    }
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 nov. 2008 à 21:28
Salut.. c'est plus simple avec un Control qu'un UserControl :


 


public partial class Form1 : Form
{
    private class MyControl : Control
    {
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT;
                return cp;
            }
        }


        protected override void OnPaintBackground( PaintEventArgs args )
        {
            //base.OnPaintBackground( args );


            Graphics g = args.Graphics;
            Rectangle r = this.ClientRectangle;
            g.DrawRectangle( Pens.Black, new Rectangle( 0, 0, r.Width - 1, r.Height - 1  ) );
            g.FillRectangle( new SolidBrush( Color.FromArgb( 128, Color.Red ) ), r );
        }
       
    }


    public Form1( )
    {
        InitializeComponent( );


        PictureBox pb = new PictureBox( );
        pb.Size = new Size( 100, 100 );
        pb.BackColor = Color.AliceBlue;
        pb.BorderStyle = BorderStyle.FixedSingle;


        MyControl mc = new MyControl( );
        mc.Size = new Size( 100, 100 );
        mc.Location = new Point( 50, 50 );


        this.Controls.AddRange( new Control[ ] { mc, pb } );
    }
}
0
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
23 nov. 2008 à 19:31
Si je comprends bien tu surchages (=overrride?) la méthode onPaint qui est herité de la classe mère? Je vais eesayer dès demain soir car là j'ai les yeux qui me piquent à mort . Merci à toi Lutinore.

La connaissance est la plus grande des richesses.
0
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
26 nov. 2008 à 11:50
Désolé Lutinore ça ne marche pas...Heu je fais un usercontrol et non un control car je suis obligé. J'ai cherché et trouvé des aides mais sans résultat probant (transparencyKey(affiche le form et non le picture box en dessous), makeTransparent (que sur les bitmaps...) et Opacity (rend transparent mais le résultat est pareil que sur transparencyKey et en plus cette propriété n'existe pas dans un usercontrol mais sur le form uniquement).

La connaissance est la plus grande des richesses.
0
Rejoignez-nous