Benutzer mit den meisten Antworten
VB 10 Label transparent wie geht das?

Frage
-
(Umgebung: WIN7 | VB10 | als Forms !!!)
Als Umsteiger von VB 6 auf VB 10 stolpere ich gerade verzweifelt über das fehlen der simplen Eigenschaft zu Label.Style.Transparent!
Alles was ich im Forum finden konnte läuft über
Label.BackColor=Color.Transparent --> wo ich ja gern mitgehen würde, aber auch das geht nicht.
auch der vorgeschlagene Weg mit Alpha den ich ja toll finden würde will nicht klappen
Label1.BackColor = Color.FromArgb(0, 0, 0, 0)
auch ein vorangestelltes parent zum unter dem label liegenden Objekt war ohne erfolg
Warum ist es so schwer simple in VB6 total einfache Dinge hier zu realisieren???
Noch eine Frage:
Die schönen neuen optischen Elemente wie Progressbar u.ä. wirken auf der Entwicklungsoberfläche noch so wie sollen aber sobald ich in Debug gehe sehen sie aus wie anno Windows 3.1 (wirken die nur unter WPF so oder was mach ich falsch)???
Vielen Dank vorab
Antworten
-
Hallo Jason,
hast du es inzwischen hinbekommen? Wenn nicht habe ich hier noch einen Ansatz für dich, mit dem du Transparente Labels erstellen kannst:
Class TransparentLabel Inherits Control 'Wenn sich der Text ändert soll das Steuerelement 'neugezeichnet werden Protected Overrides Sub OnTextChanged(e As EventArgs) MyBase.OnTextChanged(e) Invalidate() End Sub 'Das Zeichnen des Elements übernehmen wir selbst: Protected Overrides Sub OnPaint(e As PaintEventArgs) 'base.OnPaint(e); 'Erst erstellen wir einen Pinsel mit der Farbe 'Die der Benutzer für das Control eingestellt hat Dim myBrush As Brush = New SolidBrush(ForeColor) 'Den Text zeichnen e.Graphics.DrawString(Text, Font, myBrush, New PointF(-1, 0)) End Sub 'Den Hintergrund nicht zeichnen Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs) 'base.OnPaintBackground(pevent); End Sub 'Mit dem Überschreiben der CreateParams 'Können wir den Hintergrund "wirklich" 'tranzparent machen. Protected Overrides ReadOnly Property CreateParams() As CreateParams Get Dim cp As CreateParams = MyBase.CreateParams cp.ExStyle = cp.ExStyle Or &H20 Return cp End Get End Property End Class
Erstell eine neue Klasse und füge diesen Inhalt dort ein. Nun kompiliere das Projekt und dann müsste ein neues Steuerelement in deiner Werkzeugleiste namens "TransparentLabel" auftauchen. Dieses Label solltest du nun so nutzen können wie du beschrieben hast.
MfG, Sebastian Gross- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 8. September 2010 09:25
Alle Antworten
-
Hallo jason,
das Setzen der Hintergrundfarbe auf Transparent bewirkt nur dass das Label die Hintergrundfarbe des darunter liegenden Containers erbt.
Wenn du wirkliche Transparenz haben willst musst du die CreateParams Methode überschreiben so wie hier gezeigt:
MfG, Sebastian Gross -
Vielen Dank für die Beiträge, leider komm ich nicht weiter.
Bisher unter VB6 verwendete ich leere Label als sog. GhostButton also nicht sichtbare Schaltflächen zum einen UND zum Anderen um variablen Text über einem AxShockwaveFlash1 darzustellen.
Dieses zu erreichen war in VB6 wirklich völlig simpel. Ich bereue schon fast den Umstieg den ich nun im .NET4 doch auch endlich wagen und schaffen will. Finde ja auch wirklich manches besser und entspannter, aber einiges ....... HOLA :-)
gibts konkret zu meinen beiden Anwendungszielen vielleicht noch andere Ansätze????
Vielen Dank
-
Hallo Jason,
hast du es inzwischen hinbekommen? Wenn nicht habe ich hier noch einen Ansatz für dich, mit dem du Transparente Labels erstellen kannst:
Class TransparentLabel Inherits Control 'Wenn sich der Text ändert soll das Steuerelement 'neugezeichnet werden Protected Overrides Sub OnTextChanged(e As EventArgs) MyBase.OnTextChanged(e) Invalidate() End Sub 'Das Zeichnen des Elements übernehmen wir selbst: Protected Overrides Sub OnPaint(e As PaintEventArgs) 'base.OnPaint(e); 'Erst erstellen wir einen Pinsel mit der Farbe 'Die der Benutzer für das Control eingestellt hat Dim myBrush As Brush = New SolidBrush(ForeColor) 'Den Text zeichnen e.Graphics.DrawString(Text, Font, myBrush, New PointF(-1, 0)) End Sub 'Den Hintergrund nicht zeichnen Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs) 'base.OnPaintBackground(pevent); End Sub 'Mit dem Überschreiben der CreateParams 'Können wir den Hintergrund "wirklich" 'tranzparent machen. Protected Overrides ReadOnly Property CreateParams() As CreateParams Get Dim cp As CreateParams = MyBase.CreateParams cp.ExStyle = cp.ExStyle Or &H20 Return cp End Get End Property End Class
Erstell eine neue Klasse und füge diesen Inhalt dort ein. Nun kompiliere das Projekt und dann müsste ein neues Steuerelement in deiner Werkzeugleiste namens "TransparentLabel" auftauchen. Dieses Label solltest du nun so nutzen können wie du beschrieben hast.
MfG, Sebastian Gross- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 8. September 2010 09:25
-
Hallo jason57x,
Komme grad nicht dazu es auszuprobieren, aber mein Bedarf ist nach wie vor existent.
Kannst Du den Code und den Hinweis von Sebastian Gross bitte testen?
Weil ich habe ihn unter Windows Vista 32-bit Operating System mit Visual Studio 2010 (Visual Basic) getestet und konnte dann das TransparentLabel als Steuerelement in Windows Forms Application – Projekttyp einwandfrei verwenden (zum Beispiel habe ich ein Button auf der Form gezogen und nachher das TransparentLabel über den Button …und es ist wirklich durchsichtig).
Danke und Grüße,
Robert