Visual Studio C# pictureBox Transparenz

...komplette Frage anzeigen

4 Antworten

Musst du denn wirklich auf "Transparent" stellen? Reicht es nicht, mit den als transparent definierten Bereichen des GIF (oder welches Format?) zu arbeiten?

Ich verstehe aber nicht ganz das Problem. Denn es ist Sinn der Transparenz, dass hindurchgeschaut werden kann! Und genau das passiert hier doch!?

Also ich habe meine Form darüber einen sich bewegender Hintergrund (picturebox1) über diesem Bild ist ein 2. Bild (picturebox2), das ich mit den pfeiltasten steuere da Bild 2 nicht die ganze Box ausfüllt hat es transparente Flächen (*.png).

Mein Problem, wenn ich den Hintergrund der picturebox2 auf transparent mache (Standarteinstellung ist "Control") dann kann ich durch picturebox1 durchsehen sehe also den Hintergrund der Form.

Hier mal ein Bild: http://www64.zippyshare.com/v/10041314/file.html das Blau um Superman ist der Backgroud von der Form der Rest ist denke ich selbsterklärend oder?

0
@musikforlive

Schon mal versucht, anstatt eine PicBox zu verwenden, das Bild im Redraw des Forms zu zeichnen, also mit Hilfe des Events Paint und der Funktion e.Graphics.DrawImage?

0
@musikforlive

Hättest du etwas Code dargestellt, wäre etwas entscheidendes bereits früher aufgefallen. Obwohl es auch aus deiner Beschreibung hervorgeht. Und zwar ist im Snapshot zu sehen, dass nicht etwa der Hintergrund der darunterliegenden PicBox in den transparenten Bereichen dargestellt wird, sondern jener des Forms. Tja, und woran liegt das? Ganz einfach: Die PicBox ganz zu oberst denkt, sie gehöre dem Form an, und nicht der darunterliegenden PicBox, wie du es gerne hättest. Was tun? Auch ganz einfach: Schreibe (mit angepassten Control-Namen) die folgende Zeile, und alle sind happy:

//Wunder geschehn... ich hab's geseh'n!
picBox2.Parent = picBox1;  

Geldgeschenke nehme ich gerne an. Eine nette Bewertung "hilfreichste" reicht aber auch für's erste Mal! ;)

0
@Toraka

Warum ist das so, also, warum löst es das Problem? Die PicBox benötigt für die Funktion der Transparenz ein Objekt, woran sie sich orientieren kann. Da du die PicBox einfach in das Form gezogen hast, wie ich vermute, wurde das auch als Parent, also als "Besitzer" definiert. Das gilt auch dann, während die PicBox über eine andere PicBox gleitet. Änderst du aber das Parent-Property auf die PicBox, über die gegleitet wird, passt sich dein Superman auch an jene Darstellung an und es schaut perfekt aus, eben so, wie von dir gewünscht: Ohne erkennbare Umrisse.

0
@Toraka

*Kopf gegen Wand schlag! Kopf gegen Wand schlag! Kopf gegen Wand schlag! *

hatte ich auch erst versucht aber dann kam beim Debug das meine picturebox leer ist... jetzt hab ich einfach mal an allen erdenklichen Stellen hingeschrieben und tatsache es klappte! jetzt hab ich zwar ein paar neue Probleme mit der Koordination aber die betreffen dich ja nicht... :D also danke schön ich schenke dir hiermit 0,00444444444444444444444€ tut mir leid wird abgerundet :P

MfG musikforliVe ;)

0
@musikforlive

Freut mich, dass es jetzt funktioniert und danke für das Feedback! Ich verstehe aber noch nicht ganz, was du genau gemacht hast, um diesen Erfolg feiern zu können? War es das Parent-Property?`

0
@Toraka
pictureBox2.Parent = pictureBox1;
        pictureBox3.Parent = pictureBox1;
        pictureBox4.Parent = pictureBox1;
        pictureBox5.Parent = pictureBox1;
        pictureBox6.Parent = pictureBox1;
        pictureBox7.Parent = pictureBox1;
        pictureBox8.Parent = pictureBox1;
        pictureBox9.Parent = pictureBox1;
        pictureBox10.Parent = pictureBox1;
        pictureBox11.Parent = pictureBox1;
        pictureBox12.Parent = pictureBox1;
        pictureBox13.Parent = pictureBox1;
        pictureBox14.Parent = pictureBox1;
        pictureBox17.Parent = pictureBox1;
        pictureBox18.Parent = pictureBox1;
        pictureBox19.Parent = pictureBox1;
        pictureBox20.Parent = pictureBox1;
        pictureBox21.Parent = pictureBox1;
        pictureBox22.Parent = pictureBox1;
        pictureBox23.Parent = pictureBox1;
        pictureBox24.Parent = pictureBox1;
        pictureBox25.Parent = pictureBox1;
        pictureBox26.Parent = pictureBox1;
        pictureBox27.Parent = pictureBox1;
        pictureBox28.Parent = pictureBox1;
        pictureBox29.Parent = pictureBox1;
        pictureBox30.Parent = pictureBox1;
        pictureBox31.Parent = pictureBox1;
        pictureBox32.Parent = pictureBox1;
        pictureBox33.Parent = pictureBox1;
        pictureBox34.Parent = pictureBox1;
        pictureBox35.Parent = pictureBox1;
        pictureBox36.Parent = pictureBox1;
        pictureBox37.Parent = pictureBox1;
        pictureBox38.Parent = pictureBox1;
        pictureBox39.Parent = pictureBox1;

Das hab ich gemacht... (:

0
@musikforlive

Danke für das Feedback! Du hast also das Property Parent angepasst. Hättest du nicht eine Schleife dafür verwenden können!? Die Nummerierung bietet sich dafür regelrecht an. Also in dieser Art:

For (int i = 2; i < 50; i++)
{
  string strPicBox = "pictureBox" + i.ToString();
  PictureBox picBox = null;

  try
  {
    picBox = (PictureBox)this.Controls[strPicBox];
  } 
  catch {}

  if(picBox != null)
    picBox.Parent = pictureBox1;
}

Probiere das doch mal aus! Das funktioniert ganz sicher und ist viel einfacher, vor allem, wenn du PictureBoxen ergänzt oder entfernst. Du müsstest nichts weiter verändern.

0

Wäre schön, wenn du, lieber "musicforlive", mitteilen würdest, ob das Setzen des Parent-Property das gewünschte Ergebnis brachte.

Dabei fällt mir auf, meintest du music for life, nicht music for live, mit deinem Pseudonym!?

ja meninte ich aber name war schon vergeben und ich hatte keine ust mehr einen neuen zusuchen...

Ich hatte aber leider seit Donnerstag morgens (ca. 6 Uhr) kein Internet mehr und konte leide dein Vorschlag noch nicht auf seine funktionalität überprüfen... Da ich jetzt doch schon zimmlich fertig von dem We bin... werde ich es morgen relisierenn und dir dnn umgehend mitttellenn ob es funktionierte... aber schon mal Danke im vorraus..! wüsche dir noch einen schönen Abend ;)

0

Kannst du bitte ein kurzes Feedback geben, ob du es erfolgreich umsetzen konntest!? Das ist doch sicher nicht zu viel verlangt?

Wenn du dich mit Bildern rumspielen willst, mach das doch in einem Bildbearbeitungsprogramm und füg dann einfach das Resultat in eine pictureBox ein.

Du hast die Frage tatsächlich gelesen? Oder gehört die Antwort zu einer anderen Frage?

0
@Toraka

Ja, ich habe die Frage gelesen und nein die Antwort gehört zu keiner anderen Frage.

Es ist eine Lösungsmöglichkeit für das Problem, das in dieser Frage angeführt ist.

Hast du nichts Besseres zu tun als andere Leute für dumm zu verkaufen?

0
@Merkurs

Die Zeit hättest du nutzen können, die Frage nochmals zu lesen. Es geht hier nicht um Bildbearbeitung, es geht um den Versuch, so etwas wie eine Animation zu realisieren. Die Grafiken sind bereits vorhanden.

0
@Merkurs

Übrigens sollte es dich keineswegs für "dumm verkaufen", wie du sofort interpretiert hast. Immerhin hätte es wirklich sein können, dass Beiträge vertauscht wurden, die Antwort im falschen Tab des Browsers eingegeben wurde.

0

Was möchtest Du wissen?