Picturebox transparent, aber auch wirklich transparent..!
-
Hallo,
ich weiss dafür gibt es eine Menge Themen, auch google liefert reichlich ergebnisse. Aber leider habe ich bis jetzt nichts richtig hilfreiches gefunden..!Mein problem ist, dass ich eine picturebox (A) auf einer anderen picturebox (B) hab. Das Bild was ich in picturebox (A) hab, ist ein gif-Bild mit transparentem hintergrund, das Bild in picturebox (B) ist ein ganz normales Bild. Picturebox (A) soll transparent sein, damit das Bild vom picturebox (B) durchsehbar ist.
Die Eigenschaft "Transparent", die man bei BackColor einstellen kann, macht die picturebox transparenz, aber "sieht" als nachfolgende Ebene nicht picturebox (B) sondern das Fenster, deshalb wird bei diesem Fall die Farbe der pictureBox (A) die gleiche Farbe, wie das Fenster haben.
Was kann ich tun, damit meine picturebox wirklich transparent wird..?
Oder, wenn das nicht so einfach geht, wie einfach wäre es denn eine picturebox so umzuformen, dass sie z.B. statt wie ein rechteck, wie ein kreis aussehen würde..?Freue mich für jede Hilfe..!
MFG Bonafide..!
-
Control.Region
oder
PictureBox.backgroundImage
oder
es Selbstzeichnen
-
Danke erstmal für deine Antwort..!
1. Was meinst du denn mit Control.Region..?
2. Was soll ich denn bei pictureBox.Backgroundimage einstellen..? Das Hintergrundbild..? Also das Bild in picturebox (B)..?
3. Das mit dem selbstzeichen war öfters die einzige lösung in anderen threads, die ich gelesen hab. Mein problem ist hier, dass ich nicht so richtig weiss, wie man so was macht..!
-
Einen guten Artikel zum Selberzeichnen gibt es in einem anderen Forum: http://www.mycsharp.de/wbb2/thread.php?threadid=21782
-
Bonafide schrieb:
1. Was meinst du denn mit Control.Region..?
Bonafide schrieb:
Oder, wenn das nicht so einfach geht, wie einfach wäre es denn eine picturebox so umzuformen, dass sie z.B. statt wie ein rechteck, wie ein kreis aussehen würde..?
Control.Region ist eine Property jedes Steuerlementes, welches die Form des Steuerelements angibt.[/quote]
Edit:
Bonafide schrieb:
Ja
-
Danke euch..!
Rhombicosidodecahedron schrieb:
Bonafide schrieb:
1. Was meinst du denn mit Control.Region..?
Bonafide schrieb:
Oder, wenn das nicht so einfach geht, wie einfach wäre es denn eine picturebox so umzuformen, dass sie z.B. statt wie ein rechteck, wie ein kreis aussehen würde..?
Control.Region ist eine Property jedes Steuerlementes, welches die Form des Steuerelements angibt.
[/quote]
Das heisst mit Control.Region, kann ich die Form eines Steurelements manipulieren..? Oder wie ist das gemeint..?
Edit:
Die Idee mit dem BackgroundImage ist nicht schlecht, nur nicht so professional, zumidenstens für mein Project nicht so gut geeignet..!
-
Vielleicht hilft dieser Artikel:
http://www.codeproject.com/KB/dotnet/transparent_controls_net.aspx
-
Hallo,
weiss ist lange her von meinem letzten Beitrag, nur hatte ich wenig Zeit.
Wie auch immer, habe folgenden Code, womit ich meine zwei Bilder selber zeichne (Das passiert im Paint-Event der Form)..:Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); // 1.Bild Image _Image_1 = Properties.Resources.mein_Bild; g.DrawImage(_Image_1, 0, 0, _Image_1.Width, _Image_1.Height); // 2.Bild Image _Image_2 = Properties.Resources.mein_Bild_2; g.DrawImage(_Image_2, 0, 0, _Image_2.Width, _Image_2.Height);
Der Code funktioniert auch einwandfrei, Bild 1 ist unterhalb von Bild 2 und Bild 2 ist auch dann wirklich transparetn.
Mir wurde bei einem anderen Forum gesagt, ich sollte nicht "CreateGraphics();"
benutzen aus irgendein Grund. Meine Frage ist wieso..?Und 2. und wichtigste, ich will, dass ich Bild 2 mit der Mouse verschieben kann.
Wie könnte ich das realisieren..?Ok klar benutze ich MouseDown, MouseMove und MouseUp events, aber wie teste ich, dass gerade der Nutzer auf ein gezeichnetes Object klickt..!
-
Stichwort "Drag and Drop". Google danach.
Und wehe du kommst wieder mit "Google hat mir nicht geholfen", Google hilft immer!
-
FreakY<3Cpp schrieb:
Stichwort "Drag and Drop". Google danach.
Und wehe du kommst wieder mit "Google hat mir nicht geholfen", Google hilft immer!Entweder hast du meine Frage nicht verstanden, oder du hast mein Beitrag generell nicht gelesen..!
Will dich ja nicht in irgendeiner weise angreifen, doch wie drag & drop funktioniert weiss ich und ich glaube, dass ich das auch gesagt hab (MouseDown-Move-Up), mein Problem ist wie ich testen kann, ob der Zeiger auf ein gezeichnetes Object liegt..!
Könnte ich dem gezeichnetem Object einen Namen geben oder so ähnlich ..?
Wie kann ich vorgehen..?Ahh und google hilft leider doch nicht immer, aber sehr oft..!
-
Mir hat Google bisher immer geholfen
.
Und doch, ich habe deine Frage verstanden, denn sie lautet "ich will, dass ich Bild 2 mit der Mouse verschieben kann." und das geht mit Drag and Drop.
-
FreakY<3Cpp schrieb:
Mir hat Google bisher immer geholfen
.
Und doch, ich habe deine Frage verstanden, denn sie lautet "ich will, dass ich Bild 2 mit der Mouse verschieben kann." und das geht mit Drag and Drop.Ok ich stell meine Frage genauer..:
Wenn ich eine pictureBox hab und sie mit der der Mouse verschieben will, also per Drag & Drop, benutze ich die Events die mir eine pictureBox bereitstellt, nämlich MouseDown-Move und Up. So hätte ich das bei einer pictureBox gemacht.Nun jetzt habe ich keine pictureBoxes mehr, aber einfach gezeichnete Objekte, die ich so gezeichnet hab..:
Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); // 1.Bild Image _Image_1 = Properties.Resources.mein_Bild; g.DrawImage(_Image_1, 0, 0, _Image_1.Width, _Image_1.Height); // 2.Bild Image _Image_2 = Properties.Resources.mein_Bild_2; g.DrawImage(_Image_2, 0, 0, _Image_2.Width, _Image_2.Height);
Nun wie du dier jetzt schon verstellen kannst, worauf ich hinaus will, habe ich hier keine solche events. Deshalb die Idee die MoveDown-Up-Move events der Form zu benutzen.
Mein Problem ist jetzt, dass ich mich mit dem zeichnen fast überhaupt nicht auskenne und ich nicht weiss wie ich mein Bild 2 ansprechen soll..!So und ich hoffe jetzt, dass meine Frage klarer wurde..!
-
Wahrscheinlich meinst du mit "anderem Forum" das myCSharp-Forum?
Dann s. http://www.mycsharp.de/wbb2/thread.php?threadid=29081Und "CreateGraphics" ist unnötig, da man nur im Paint-Ereisgnis zeichen soll (und dort gibt es dann die Eigenschaft "e.Graphics" (wobei 'e' der PaintEventArgs-Parameter ist)!!!
-
Th69 schrieb:
Wahrscheinlich meinst du mit "anderem Forum" das myCSharp-Forum?
Dann s. http://www.mycsharp.de/wbb2/thread.php?threadid=29081Und "CreateGraphics" ist unnötig, da man nur im Paint-Ereisgnis zeichen soll (und dort gibt es dann die Eigenschaft "e.Graphics" (wobei 'e' der PaintEventArgs-Parameter ist)!!!
Danke, das hat mich schon ein wenig weitergebracht..!
Ja und ich meine das myCSharp-Forum..!
Durch das Thema, was du mir vorgestellt hast ...: "
[Tutorial] Gezeichnete Objekte mit der Maus verschieben ", habe ich versucht das auf mein Project anzuwenden. So wie ich es verstnaden habe, speichert man jedes gezeichnete Object in eine Liste und ruft diese Liste bei der MouseDown-Funktion auf und tested welches Object zuletzt eingefügt wurde, damit man seine Position verändern kann..!
Also habe ich meine Liste, die aus GraphicObjects besteht...:List<MyGraphicObject> _graphicObjects = new List<MyGraphicObject>();
Mittlerweile sieht meine onPaint funktion so aus..:
protected override void OnPaint(PaintEventArgs e) { // 1.Bild Image _Image_1 = Properties.Resources.brett; e.Graphics.DrawImage(_Image_1, 0, 0, _Image_1.Width, _Image_1.Height); // 2.Bild Image _Image_2 = Properties.Resources.mauros_stratiotis; e.Graphics.DrawImage(_Image_2, 0, 0, _Image_2.Width, _Image_2.Height); }
Wie kann ich jetzt zum Beispiel Bild-1 in meine Liste abspeichern..?
Mit_graphicObjects.Add(...);
soll es gehen, aber "_graphicObjects.Add(...);" verlangt ein Object vom Typ MyGraphicObject ..!
Wie kann ich hier vorgehen..?
Das Tut was ich gelesen hab arbeitet mit kreise, linien, rechtecken und Labels und das verwirrt mich ein wenig..!