Rubrik: Oberfläche · Effekte | VB-Versionen: VB2010 - VB2015 | 04.09.20 |
Ein Trick für echte Form-Transparenz Um eine echte Transparenz einer Form zu zeigen, muss man den hier erklärten Trick anwenden. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 3.092 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Für eine Form gibt es vorgegebene 2 Möglichkeiten Transparenz anzuwenden:
- Dieselbe Farbe für TransParancyKey angeben wie für die BackColor. Dann ist der Hintergrund der Form bei der Anzeige vollkommen ausgeblendet.
- Die Einstellung der Opacity für die Form zwischen 0 und 100 Prozent. Dann kann die Form sozusagen semitransparent dargestellt werden. Allerdings werden dann auch alle auf der Form platzierten Controls gleich mit transparent gezeigt.
Um den Hintergrund von Controls semitransparent zu machen, die Controls aber in "Original"-Darstellung anzuzeigen, kann man sich mit dem folgenden Trick behelfen. Es wird eine zweite Form definiert, die sogenannte BackgroundForm, die dann in der Runtime genau hinter der MainForm positioniert wird.
MainForm sei die Hauptform, auf der die Controls angeordnet sind.
Dann richtet man diese Form so ein, wie hier im Code des Load-Events notiert:
BackColor mit der gewünschten Farbe, die dann gleichzeiteig zu TransparencyKey gemacht wird.
Als Public Property bgFrmForm wird die BackgroundForm vorgegeben.
Diese BackgroundForm wird jetzt mit Eigenschaften versorgt:
- die Eigenschaft bgColor wird auf die BackColor der MainForm eingestellt
- die Semitransparenz wird auf einen Wert zwischen 0 und 1 eingestellt
- die MainForm wird zur OwnerForm
- die BackgrundForm wird angezeigt
Beschreibung der BackgroundForm:
Sie enthält die drei Eigenschaften bgOwnerForm, bgOpacity, bgColor, die alle beim Laden der MainForm voreingestellt werden. Sie steuern das Erscheinungsbild des Hintergrunds.
Im Shown-Event der BackgroundForm wird zunächst
- die OwnerForm gesetzt, dann
- die Größe mit der Größe der Mainform gleichgesetzt
- die Location mit der Location der MainForm gleichgesetzt
- die BackColor aus der Eigenschaft bgColor gesetzt
- die Opacity aus der Eigenschaft bgOpacity gesetzt
Jetzt wird zur MainForm ein semitransparenter Hintergrund in einer gewünschten Farbe gezeigt und alle Controls der MainForm werden "nichttransparent" angezeigt.
Hier der Code zur MainForm:
Public Class MainForm Public Property bgFrmForm As Form = BackgroundForm Public Sub New() InitializeComponent() SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint _ Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True) End Sub Private Sub MainForm_Load(sender As Object, e As EventArgs) _ Handles Me.Load BackColor = Color.Black TransparencyKey = BackColor BringToFront() With BackgroundForm .bgColor = BackColor .bgOpacity = 0.4 .bgOwnerForm = Me .Show() End With End Sub End Class
Hier der Code zur BackgroundForm:
Public Class BackgroundForm Public Property bgOwnerForm As Form Public Property bgOpacity As Single = 0.6 Public Property bgColor As Color = Color.Black Public Sub New() InitializeComponent() SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint _ Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True) End Sub Private Sub dhBackgroundForm_Shown(sender As Object, e As EventArgs) _ Handles Me.Shown Owner = bgOwnerForm Size = New Size(bgOwnerForm.Size) Location = New Point(bgOwnerForm.Location) BackColor = bgColor Opacity = bgOpacity End Sub End Class
Hinweis:
Dieser Tipp zeigt ausschließlich ein Prinzip der Lösung auf. Es werden nicht Aktionen wie Resizing, Verschieben oder dergleichen der MainForm behandelt!