2016-04-19 14 views
2

TL; DR: Schauen Sie sich das Bild untenMachen Sie Bildkästen transparent und überlappen einander mit einer Ecke?

Also, ich versuche, ein kleines Bild zu machen und ich und die Leute um mich herum sind irgendwie die Ideen aus.

Ich habe einen Tisch (das Sitzen + Essen eines) in der Mitte (von oben gesehen), und Leute sitzen um ihn herum. Diese Leute sind rund wie der Tisch.

Jede Person hat ihre eigene Picturebox, ich benutze nur ein Bild, drehe es und setze es als Bild in die nächste Box.

Das Problem ist jetzt: Die PictureBoxen von Menschen an Ecken überlappen die Tabelle mit leeren Ecken, im Bild ist dort Transparenz. Es sollte die Tabelle darunter zeigen, aber stattdessen zeigt es den Hintergrund des Formulars :(

Bearbeiten: Alle Hintergründe sind auf transparent festgelegt, die Form hat die Marmor als Hintergrund und weiß ("Window") als Hintergrundfarbe .

habe ich in den Rücken und eine in der Front eine Person, es ist so leicht zu sehen:

Here's what's going on

Edit 2 (gleich wie ocmment):

In den letzten zwei Tagen habe ich diese Frage ungefähr zehn Mal gelesen, und keine, die dieses genaue Problem beschrieben hat, hat eine tatsächliche Antwort erhalten. Als ich versuchte, einen davon zu drücken, wurde mir gesagt, ich sollte eine neue Frage stellen.

Beispiel: How to make picturebox transparent?

+0

Downvote Grund: Diese Frage wurde wiederholt überall im Internet und insbesondere [stackoverflow] (http://stackoverflow.com/search?q=%5Bwinforms%5D+transparent+picturebox) gestellt und beantwortet. Bitte beachten Sie den Such- und Recherchebereich in [fragen]. –

+0

In den letzten zwei Tagen habe ich diese Frage etwa 10 Mal gelesen, und keiner, der dieses genaue Problem beschrieben hat, hat eine tatsächliche Antwort erhalten. Als ich versuchte, einen davon zu drücken, wurde mir gesagt, ich sollte eine neue Frage stellen. – Squirrelkiller

+0

[Werfen Sie einen Blick auf diesen Artikel] (http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=26878&av=611567) –

Antwort

3

Transparenz in WinForms ist eine Art irreführend, da sie die Transparenz nicht wirklich ist.
Winforms-Steuerelemente simulieren die Transparenz, indem sie den Teil der übergeordneten Steuerelemente, den sie anstelle ihres eigenen Hintergrunds ausblenden, malen.
Sie werden jedoch die anderen Steuerelemente, die teilweise von ihnen abgedeckt sind, nicht darstellen.
Dies ist der Grund, warum Ihre Top Picture Boxes Ihre große Bilderbox verbirgt.

Sie können dies vermeiden, indem eine individuelle Steuerung zu schaffen, die von PictureBox erbt und überschreiben seine OnPaintBackground Methode (genommen, mit leichten Anpassungen, von this code project article):

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

    if (this.Parent != null) 
    { 
     var index = Parent.Controls.GetChildIndex(this); 
     for (var i = Parent.Controls.Count - 1; i > index; i--) 
     { 
      var c = Parent.Controls[i]; 
      if (c.Bounds.IntersectsWith(Bounds) && c.Visible) 
      { 
       using (var bmp = new Bitmap(c.Width, c.Height, g)) 
       { 
        c.DrawToBitmap(bmp, c.ClientRectangle); 
        g.TranslateTransform(c.Left - Left, c.Top - Top); 
        g.DrawImageUnscaled(bmp, Point.Empty); 
        g.TranslateTransform(Left - c.Left, Top - c.Top); 
       } 
      } 
     } 
    } 
} 

Microsoft hat ein Knowledge base article veröffentlichen dieses Problem eine lösen vor langer Zeit, aber es ist ein wenig veraltet und es ist Code-Beispiel in VB.Net.

Eine andere Möglichkeit ist, die Bilder selbst zu malen, ohne Bildrahmen, um sie zu halten, mit Graphics.DrawImage Methode.
Der beste Ort, um es zu tun ist wahrscheinlich in der OnPaint Methode des Formulars.

+0

Woah danke Alter. Nicht nur das beste Arbeiten, sondern auch eine der einfachsten Antworten. Hatte diesen Artikel auch schon einmal benutzt, nur die ganze TranspControl Klasse. Hat nicht so gut funktioniert wie deine Lösung :). – Squirrelkiller

+0

Gut zu helfen :-). –

+0

[Hier] (http://stackoverflow.com/a/36102074/3110834) ist eine Implementierung von 'TransparentLabel' und' TransparentPictureBox', die Sie hilfreich finden können. –

Verwandte Themen