none
VB 10 Label transparent wie geht das? RRS feed

  • 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

    Donnerstag, 2. September 2010 10:17

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
    Mittwoch, 8. September 2010 06:18

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:

    http://www.eggheadcafe.com/software/aspnet/33551516/transparenz-als-backgroundcolor-festlegen-geht-nicht.aspx


    MfG, Sebastian Gross
    Donnerstag, 2. September 2010 10:55
  • Hallo jason57x,

    Zeichne in das Paint-Ereignis des Steuerelements auf dem Du das Label platzieren möchtest einfach eine Zeichenfolge, mithilfe der Grafik-Ereignisse.

    Grüße,

    Robert

    Donnerstag, 2. September 2010 11:55
    Moderator
  • 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

    Donnerstag, 2. September 2010 22:15
  • 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
    Mittwoch, 8. September 2010 06:18
  • Hallo Sebastian,

     

    vielen Dank für deinen Beitrag. Komme grad nicht dazu es auszuprobieren, aber mein Bedarf ist nach wie vor existent.

    Es wäre schön wenns geht melde mich sobald ich dazu kam.

     

    DANKE

     

    Mittwoch, 8. September 2010 15:23
  • 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

    Donnerstag, 9. September 2010 10:05
    Moderator