Einstellung der Eltern von einem Benutzersteuerelement verhindert, dass Sie transparent
Ich habe eine einfache Benutzer-Steuerung, die manuell erstellt, mit so etwas wie
MyUserControl ctrl = new MyUserControl();
Control wurden entwickelt, um BackColor = Farbe.Transparente und das funktioniert auch, bis ich die Eltern des Steuerelements zu einem Formular, an der Zeit verwandelt es sich in der Farbe von der form.
Anhören mag, die transparente, aber was es tut, ist, verstecken sich alle Steuerelemente, die vorhanden sind, auf die form als auch. Ich bin mir nicht 100% sicher sein das die Kontrolle, der bekommt einen soliden hintergrund oder etwas anderes, das ist passiert, wenn ich es hook up, die verhindert, dass andere Steuerelemente angezeigt werden.
Grundsätzlich, wenn Sie dies tun
- Erstellen Sie ein Formular
- Drop eine Schaltfläche auf es
- In der click-Ereignishandler für die Schaltfläche, die Sie tun, die folgenden
Beispiel
MyUserControl ctrl = new MyUserControl();
ctrl.Parent = this;
ctrl.BackColor = Color.Transparent;
ctrl.Size = this.Parent.ClientRectangle.Size;
ctrl.Location = this.Parent.ClientRectangle.Location;
ctrl.BringToFront();
ctrl.Show();
Grundsätzlich will ich das usercontrol zu überlagern, die gesamte form, während mit der darunterliegenden Steuerelemente auf dem Formular (also transparenter hintergrund). Ich will nicht, um es in der forms-Steuerelement-Sammlung, weil es nicht wirklich gehören zu der form, der gerade gezeigt ontop alles andere
Ich habe versucht, das gleiche zu tun, aber ohne die Eltern, aber dann wird die Kontrolle nicht erscheint.
Dank!
EDIT: Wenn ich das überschreiben der OnPaintBackground-Methode im usercontrol und verhindern, dass der hintergrund gemalt, dann funktioniert es, jedoch vermasselt die transparenten Teile von PNG-Bild-im-Malerei in der Steuerung mit Hilfe der Methode DrawImage, was Sinn macht.
InformationsquelleAutor TheCodeJunkie | 2008-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows Forms nicht wirklich transparent steuert.
Sie können diese Einschränkung umgehen, durch überschreiben der CreateParams-Eigenschaft des Steuerelements und setzen Sie einen benutzerdefinierten Stil (schauen Sie auf google).
Des weiteren müssen Sie das überschreiben der Malerei Ihrer Kontrolle, so dass nicht nur Ihre Steuern, sondern auch das übergeordnete Steuerelement neu gezeichnet wird. Der Grund dafür ist, dass der hintergrund muss lackiert werden, bevor Sie Ihre Kontrolle Malt sich selbst.
Schließlich sollten Sie überschreiben die OnPaintBackground-Methode, wie Sie getan haben, um sicherzustellen, dass kein hintergrund gezeichnet.
Sehr umständlich und nicht perfekt, aber es sollte funktionieren.
Nein, ich denke, du meinst, WS_EX_TRANSPARENT
Ich habe gerade nachgesehen. sollten Sie ODER ExStyle Eigenschaft der CreateParams-Objekte mit EX_TRANSPARENT (0x00000020)
InformationsquelleAutor Rune Grimstad