Toon posts:

c# Transparant picturebox

Pagina: 1
Acties:
  • 1.052 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

ik heb een plaatje ingeladen in mijn picturebox met een transparante kleur.
Mijn plaatje is het complete form, voor mijn lay-out, daarover heen moeten controls komen.

Nu heb ik dus de transparante kleur ingesteld, wat gewoon goed gaat want wanneer ik van het form de background color wijzig zie ik die ook netjes terug wanneer ik alles run.

Nu heb ik dus ook eigen controls op het form gezet en eventueel een label ook.
Ik zet ze op de correcte plaatsen en vervolgens zeg ik tegen mijn picturebox bring to front, zodat de lay-out netjes is en waar ik de boel transparant heb gemaakt moeten mijn controls zichtbaar worden.

Echter worden de controls niet zichtbaar maar alleen de achtergrond kleur van het form. Waar doe ik iets fout? Thx

C#:
1
2
3
4
//  set transparant color
            Bitmap bmp = new Bitmap(this.ImgBackground.Image);
            bmp.MakeTransparent(Color.FromArgb(255,0,255));
            this.ImgBackground.Image= bmp;


gebruik ik voor trans maken, dat gaat goed alleen de controls zijn ook nog niet zichtbaar hiermee:(

Verwijderd

Weet niet precies of dit ook in jou situatie helpt, maar:

code:
1
SetStyle(ControlStyles.SupportsTransparentBackColor, true);

Verwijderd

Topicstarter
bedankt, maar deze had ik ook al aanstaan.
Helpt dus in dit geval niet.

Verwijderd

Misschien moet je de backcolor van de picturebox ook op transparant zetten?

code:
1
2
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparant;

Verwijderd

Topicstarter
ook dat is gebeurd, anders kon ik nooit de backcolor van het form zien.

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 20-02 21:36
Ik heb er ook een tijd mee zitten spelen, maar voor zover ik kon achterhalen is het gewoon onmogelijk, en is dit gewoon de manier hoe backgrounds van controls worden getekend.

Ik heb het uiteindelijk opgelost door zoveel mogelijk de tekenen op de Graphics van het form, en dan bijvoorbeeld een eigen textbox maken met een eigen OnPaint...

Verwijderd

Flard schreef op dinsdag 23 mei 2006 @ 22:05:
Ik heb er ook een tijd mee zitten spelen, maar voor zover ik kon achterhalen is het gewoon onmogelijk, en is dit gewoon de manier hoe backgrounds van controls worden getekend.

Ik heb het uiteindelijk opgelost door zoveel mogelijk de tekenen op de Graphics van het form, en dan bijvoorbeeld een eigen textbox maken met een eigen OnPaint...
Hoe ik het ooit heb gedaan is ongeveer zo (had andere doeleinden, maar zoiets zou kunnen werken denk ik):

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class TransparantPicBox : Control
    {
        BackImage = new bitmap("\image.bmp");

        public BCF2000_FaderButton()
        {
            //Add transparancy support
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

            //Make transparant
            this.BackColor = Color.Transparent;
            BackImage.MakeTransparant();

            //Give control same size as image
            Size = BackImage.Size;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            //Draw the image
            g.DrawImage(BackImage, 0, 0, BackImage.Width, BackImage.Height); 
            base.OnPaint(e);
        }
}

[ Voor 9% gewijzigd door Verwijderd op 23-05-2006 22:26 ]


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

"All painting in WM_PAINT"

even googlen.

dit moet ergens gezet kunnen worden. dit zorgt ervoor dat enkel dat wat jij in je OnPaint zet getekend wordt. De control zelf tekent dus niks meer, zelfs geen background.

ASSUME makes an ASS out of U and ME


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 20-02 21:36
Ook zie ik nu net het volgende artikel op CodeProject staan:
http://www.codeproject.com/useritems/TrulyTransPanel.asp

Wellicht dat dat je ook nog kan helpen...

Verwijderd

Topicstarter
hoi deze had ik al geprobeerd, het lost het probleem gedeeltelijk op.

Wanneer ik nu alles initialiseer dan lijkt het er toppie uit te zien.

Wanneer nu de imageshow gaat lopen en er komt dus een nieuw plaatje in het mijn photoslide panel, een eigen class geerft van panel, dan komt deze weer over mijn plaatje te staan.

De code bringtofront en sendtoback werken niet :(

Het is alleen na een this.invalidate. Geef ik de this.invalidate niet in mijn photoslide panel dan zie ik het plaatje niet. Wanneer ik met bijvoorbeeld notepad of iets dergelijks over mijn programma schuif dan komt daarna mijn plaatje wel, hij staat er dus wel maar nog niet zichtbaar....

Ben al een eindje op weg dus maar heb nog een laatste goed ingeving nodig.. ;)

  • Virtlink
  • Registratie: Maart 2005
  • Laatst online: 20-02 23:19
Verander in de code de method InvalidateEx in:
C#:
1
2
3
4
5
protected void InvalidateEx(Rectangle rect)
{
    if (Parent != null)
        Parent.Invalidate(rect, true);
}

en voeg de volgende method toe:
C#:
1
2
3
4
protected override void OnInvalidated(InvalidateEventArgs e)
{
    InvalidateEx(new Rectangle(Location.X + e.InvalidRect.X, Location.Y + e.InvalidRect.Y, e.InvalidRect.Width, e.InvalidRect.Height));
}

Dat zou een oplossing moeten bieden.
Pagina: 1