Ich habe eine einfache Benutzersteuerung geschaffen, die manuell mit so etwas wieEinstellung der Eltern eines Usercontrol verhindert, dass es transparent ist
MyUserControl ctrl = new MyUserControl();
Die Steuerung entwickelt wurden Backcolor = Color.Transparent haben erstellt und das funktioniert gut, bis ich die Parent des Steuerelements auf ein Formular festgelegt, zu welcher Zeit es in die Farbe des Formulars verwandelt.
Kann klingen wie seine transparente, aber was es tut, ist, alle Kontrollen, die auf dem Formular auch vorhanden sind, auszublenden. Ich bin nicht 100% sicher, es ist das Steuerelement, das einen soliden Hintergrund oder etwas anderes, das passiert, wenn ich es einhakte, was verhindert, dass andere Steuerelemente angezeigt werden.
Grundsätzlich, wenn Sie dies tun
- Erstellen Sie ein Formular
- Lassen Sie eine Taste auf sie
- Im Click-Handler für die Schaltfläche Sie die folgende
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 ich Die Benutzersteuerung soll das gesamte Formular überlagern und dabei die darunterliegenden Steuerelemente auf dem Formular anzeigen (daher der transparente Hintergrund). Ich möchte es nicht zur Formularsteuerungssammlung hinzufügen, weil es nicht wirklich zum Formular gehört, es wird einfach oben auf allem anderen gezeigt
Ich habe versucht, das gleiche zu tun, aber ohne die Eltern, aber dann die Kontrolle zeigte sich überhaupt nicht.
Danke!
EDIT: Wenn ich die OnPaintBackground Methode in der Benutzersteuerung überschreiben und verhindern, dass der Hintergrund gemalt wird, funktioniert es, aber das versaut die transparenten Teile eines PNG-Bildes im Bild in der Steuerung mit DrawImage, was Sinn macht.
Meinst du ich sollte das WS_CLIPCHILDREN Flag verwenden, wenn Sie das Kontrollfenster erstellen? – TheCodeJunkie
Nein, ich denke du meinst WS_EX_TRANSPARENT – TheCodeJunkie
Ich habe gerade nachgeschaut. Sie sollten ODER die ExStyle-Eigenschaft der CreateParams-Objekte mit EX_TRANSPARENT (0x00000020) –