Mit Hilfe der Extension-Methods wird hier für Textboxen eine Watermark hinterlegt
Anwendung: neues Modul
erstellen (Modul deshalb, weil Extension-Methods verwendet werden. Diese benötigen ein Modul.)
Modulcode durch den oberen Code ersetzen. Die Anwendung der Funktionen siehe unteres Beispiel.
Keine Garantie auf volle Funktionsfähigkeit. Der Code darf frei verwendet und verändert werden. Namensnennung nicht notwendig.
LG, der_Kurt
VB.NET-Quellcode
- ''' <summary>
- ''' Erweiterungsmethoden für Watermarks
- ''' </summary>
- ''' <remarks></remarks>
- Module wasserzeichenExtension
- ''' <summary>
- ''' Auflistung aller verfügbaren Wasserzeichen-Objekte
- ''' </summary>
- ''' <remarks></remarks>
- Private _allregisteredTextboxesWithWatermarks As New List(Of WTM_object)
- ''' <summary>
- ''' bindet die Wasserzeichen-Methoden an eine Textbox
- ''' </summary>
- ''' <param name="tb">die Textbox, die das Wasserzeichen erhält</param>
- ''' <param name="wasserzeichen">der Text, der als Wasserzeichen angezeigt wird</param>
- ''' <remarks></remarks>
- <Runtime.CompilerServices.Extension()>
- Sub createWatermark(tb As TextBox, wasserzeichen As String)
- Dim bereitsvorhanden As Boolean = False
- For Each obj_ausderliste In _allregisteredTextboxesWithWatermarks
- If obj_ausderliste.usedtextbox Is tb Then
- bereitsvorhanden = True
- End If
- Next
- If bereitsvorhanden = False Then
- AddHandler tb.GotFocus,
- AddressOf wasserzeichen_textbox_GotFocus
- AddHandler tb.LostFocus,
- AddressOf wasserzeichen_textbox_LostFocus
- _allregisteredTextboxesWithWatermarks.Add(
- New WTM_object With {.usedtextbox = tb,
- .wasserzeichen = wasserzeichen,
- .actualfont = tb.Font,
- .backcolor = tb.BackColor,
- .forecolor = tb.ForeColor,
- .textalign = tb.TextAlign,
- .usepwchar = tb.UseSystemPasswordChar})
- 'Effekt zum ersten Mal anwenden
- wasserzeichen_textbox_LostFocus(tb, Nothing)
- Else 'if bereitsvorhanden = True
- 'Wasserzeichen bereits vorhanden: Ausnahme auslösen
- Throw New Exception("Der Textbox '" & tb.Name & "' ist bereits ein wasserzeichen zugeordnet")
- End If
- End Sub
- ''' <summary>
- ''' entfernt die Bindung der Textbox zu einem Wasserzeichen
- ''' </summary>
- ''' <param name="tb">die Textbox, deren Wasserzeichen entfernt wird</param>
- ''' <remarks></remarks>
- <System.Runtime.CompilerServices.Extension()>
- Sub removeWatermark(tb As TextBox)
- For Each element_ausderliste In _allregisteredTextboxesWithWatermarks
- If element_ausderliste.usedtextbox Is tb Then
- 'einmal noch ausführen, um alles auf den Standard zu bringen
- wasserzeichen_textbox_GotFocus(tb, Nothing)
- RemoveHandler tb.GotFocus,
- AddressOf wasserzeichen_textbox_GotFocus
- RemoveHandler tb.LostFocus,
- AddressOf wasserzeichen_textbox_LostFocus
- _allregisteredTextboxesWithWatermarks.Remove(element_ausderliste)
- Exit For
- End If
- Next
- End Sub
- ''' <summary>
- ''' entfernt alle registrierten Wasserzeichen
- ''' </summary>
- ''' <remarks></remarks>
- Sub removeallWatermarks()
- For q = _allregisteredTextboxesWithWatermarks.Count - 1 To 0 Step -1
- removeWatermark(_allregisteredTextboxesWithWatermarks(q).usedtextbox)
- Next
- End Sub
- ''' <summary>
- ''' Eventhandler "GotFocus"
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- Private Sub wasserzeichen_textbox_GotFocus(sender As Object, e As EventArgs)
- Dim tb_sender = CType(sender, TextBox)
- For Each aktuelle_standards In _allregisteredTextboxesWithWatermarks
- If tb_sender Is aktuelle_standards.usedtextbox Then
- If aktuelle_standards.effectisapplied Then
- With tb_sender
- 'Handler 'kurz' entfernen
- 'als Workaround, weil die TB bei Umstellung des Textalign
- 'und des PW-Char Probleme macht
- RemoveHandler .GotFocus,
- AddressOf wasserzeichen_textbox_GotFocus
- RemoveHandler .LostFocus,
- AddressOf wasserzeichen_textbox_LostFocus
- ''Cursor geht in die Box rein,
- 'also auf die Standards setzen
- .Font = aktuelle_standards.actualfont
- .Text = Nothing
- .ForeColor = aktuelle_standards.forecolor
- .BackColor = aktuelle_standards.backcolor
- .TextAlign = aktuelle_standards.textalign
- .UseSystemPasswordChar = aktuelle_standards.usepwchar
- AddHandler .GotFocus,
- AddressOf wasserzeichen_textbox_GotFocus
- AddHandler .LostFocus,
- AddressOf wasserzeichen_textbox_LostFocus
- End With
- aktuelle_standards.effectisapplied = False
- End If
- Exit For
- End If
- Next
- End Sub
- ''' <summary>
- ''' Eventhandler "LostFocus"
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- Private Sub wasserzeichen_textbox_LostFocus(sender As Object, e As EventArgs)
- Dim tb_sender = CType(sender, TextBox)
- For Each element In _allregisteredTextboxesWithWatermarks
- If tb_sender Is element.usedtextbox Then
- If tb_sender.Text = Nothing Then
- With tb_sender
- ''Cursor geht raus aus der Textbox,
- ''also die Box auf die Watermark-Werte setzen
- .Text = element.wasserzeichen
- .Font = New Font(.Font,
- FontStyle.Italic)
- .BackColor = Color.FromKnownColor(KnownColor.Info)
- .ForeColor = Color.Gray
- .TextAlign = HorizontalAlignment.Left
- .UseSystemPasswordChar = False
- End With
- element.effectisapplied = True
- End If
- Exit For
- End If
- Next
- End Sub
- Friend Class WTM_object
- Friend effectisapplied As Boolean
- Friend usedtextbox As TextBox
- Friend wasserzeichen As String
- Friend actualfont As Font
- Friend forecolor As Color
- Friend backcolor As Color
- Friend textalign As HorizontalAlignment
- Friend usepwchar As Boolean
- End Class
- 'TODO: Änderungen der Eigenschaften der Textbox in WTM_objekt integrieren
- '##### Änderungen, die an der Textbox gemacht werden, während der Effekt
- '##### aktiv ist, müssen noch in die richtigen Bahnen gelenkt werden.
- 'TODO: Aussehen des Effekts veränderbar machen
- '##### Der Effekt ist im Moment hardcodiert, nur über den Quelltext zu ändern
- 'License: "Do whatever you want, but don't blame me"
- '######## Der Code darf frei verwendet, verändert werden
- '######## Namensnennung nicht notwendig
- End Module
Anwendung: neues Modul
![:!:](https://www.vb-paradise.de/wcf/images/smilies/attention.png)
Modulcode durch den oberen Code ersetzen. Die Anwendung der Funktionen siehe unteres Beispiel.
Keine Garantie auf volle Funktionsfähigkeit. Der Code darf frei verwendet und verändert werden. Namensnennung nicht notwendig.
LG, der_Kurt
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ () aus folgendem Grund: Screenshot hinzugefügt