Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB.NET | 17.03.08 |
Wortanfang in der TextBox autom. groß (.NET) Mit dieser TextBox-Klasse wird optional die Großschreibung des ersten Buchstabens eines jeden neuen Wortes unterstützt | ||
Autor: Thorsten Shoof | Bewertung: | Views: 12.946 |
www.schoof-webdesign.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Bei der Eingabe von z.B. Namen in ein Textfeld stellt VB.NET die VbStrConv-Funktion zur Verfügung, mit der jedes Wort des übergebenen Strings autom. groß geschrieben wird. Ärgerlich ist nur, dass die Korrektur des Textes erst nach dem Verlust des Focus durchgeführt werden kann, oder der Cursor bleibt an Position 0 des Textfeldes.
Folgendes Ergebnis sollte zur Laufzeit entstehn: aus "m" wird bei weiterer Eingabe "Mü". Gleichzeitig sollte diese Funktion optional sein, um bei Namen wie "von Eckstein" auch Kleinschreibung zuzulassen. Hierfür können wir eine neue Klasse txtBox mit folgendem Quelltext erstellen:
Imports System.Windows.Forms Public Class txtBox ' von Standard TextBox abgeleitete Klasse Inherits TextBox Private pos As Integer Private kleinschreibung As Double Private mygroßschreibung As Boolean
Sub New() MyBase.New() ' Eigenschaft wird auf FALSE gesetzt mygroßschreibung = False End Sub
' Eigenschaft wird erstellt Public Property Großschreibung() As Boolean Get Return mygroßschreibung End Get Set(ByVal value As Boolean) mygroßschreibung = value End Set End Property
Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs) If mygroßschreibung = False Then Exit Sub pos = Me.SelectionStart MyBase.OnKeyPress(e) ' Eigenschaft wird überprüft If kleinschreibung = 0 Then If Me.SelectionStart = 0 Then If Me.TextLength = 1 Then ' Bei Eingabe des zweiten Buchstaben wird ' der Anfangsbuchstabe großgeschrieben Me.Text = StrConv(Me.Text, VbStrConv.ProperCase) Me.SelectionStart = Len(Me.Text) Else ' wird ein Schreibfehler korrigiert (Textbox ist ' gefüllt), wird der 1. Buchstabe großgeschrieben Me.Text = StrConv(Me.Text, VbStrConv.ProperCase) Me.SelectionStart = pos End If Else Me.Text = StrConv(Me.Text, VbStrConv.ProperCase) Me.SelectionStart = pos End If End If End Sub
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs) pos = Me.SelectionStart MyBase.OnKeyDown(e) If kleinschreibung = 0 Then ' Linke und rechte Pfeiltaste bleiben aktiv If e.KeyCode = Keys.Left Or e.KeyCode = Keys.Right Then Me.Text = StrConv(Me.Text, VbStrConv.ProperCase) Me.SelectionStart = pos End If End If End Sub
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs) MyBase.OnKeyUp(e) ' F2-Taste zum Ein und Ausschalten der ' Funktion in der jeweiligen Txtbox If e.KeyCode = Keys.F2 Then If kleinschreibung = 0 Then kleinschreibung = 1 Else kleinschreibung = 0 End If End If End Sub
End Class
Nach dem erneuten Erstellen des Projekts steht die Klasse in der Toolbox als txtBox-Eintrag zur Verfügung.
Wird ein neues Textfeld benötigt, bei dem die Groß- und Kleinschreibung automatisch berücksichtigt wird, zieht man einfach das txtBox-Element aus der Toolbox auf die Form. Nun noch die Eigenschaft "Sonstiges/Großschreibung" auf TRUE setzen und die Funktion steht bereit. Die Funktion lässt sich durch drücken der F2-Taste aus- und einschalten wenn die jeweilige Textbox den Focus besitzt.