Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0133: Transparenz zweier sich überdeckender Label

 von 

Beschreibung

Um echte Transparenz zweier sich überdeckender Label zu erreichen (beispielsweise um einen Schatten für eine Beschriftung zu realisieren) reicht es nicht, die Farbe des im Vordergrund liegenden Labels auf Transparent zu stellen. Zusätzlich muss das im Hintergrund liegende Label explizit zum Container des verdeckenden Labels deklariert werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010

Download:

Download des Beispielprojektes [11,77 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    An
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Option Explicit On
Option Strict On

Public Class Form1
    ''' <summary>
    ''' Farbe, Position und Beschriftung aller Steuerelemente
    ''' </summary>
    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Size = New Size(320, 220)

        RadioButton1.Location = New Point(15, 130)
        RadioButton1.Text = _
            "Label 2 dem Label1 zuzuordnen macht es durchsichtig"

        RadioButton2.Location = New Point(15, 150)
        RadioButton2.Text = "Label2 dem Form zuzuordnen macht es undurchsichtig"

        With Label1
            .BackColor = Color.Yellow
            .ForeColor = Color.Blue
            .Font = New Font("Microsoft Sans Serif", 15.75, FontStyle.Regular)
            .Location = New Point(32, 40)
            .Text = "Ich bin Label1" & vbCrLf & "mit einer Beschriftung"
        End With

        With Label2
            ' Die Farbeinstellung Transparent wirkt immer nur transparent 
            '  bezüglich der Farbe des Containers
            .BackColor = Color.Transparent
            .ForeColor = Color.Black
            .Font = New Font("Microsoft Sans Serif", 15.75, FontStyle.Regular)
            .Location = New Point(42, 50)
            .BringToFront()
            .Text = "Ich bin Label 2"
        End With
    End Sub

    ''' <summary>
    ''' Ist Label1 der Container für Label2, dann wirkt der Hintergund von 
    '''  Label 2 tatsächlich transparent 
    ''' </summary>
    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

        ' Label1 wird zum Container für Label2
        Label2.Parent = Label1

        ' Die Position des Label2 innerhalb seines Containers Label1
        Dim p As Point = Label1.PointToScreen(Label1.Location)
        Dim pt As New Point(p.X - 22, p.Y - 30)
        Label2.Location = Label1.PointToClient(pt)
    End Sub

    ''' <summary>
    ''' Ist Form1 Container für Label2, dann wirkt der Hintergund undurchsichtig
    ''' </summary>
    Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

        'Form1 wird zum Container für Label2
        Label2.Parent = Me

        'Die Position des Label2 innerhalb seines Containers Form1
        Label2.Location = New Point(42, 50)

        Label2.BringToFront()
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.