Haben Sie sich auch schon mal über die Textbox geärgert? Fehlen Ihnen nicht auch einige Funktionen wie z.B. den Text automatisch markieren beim Fokuserhalt der Textbox? Klar sagen Sie, ist doch kein Problem: Private Sub Text1_GotFocus() With Text1 .SelStart = 0 .SelLength = Len(.Text) End With End Sub Oder aber die Textbox reagiert nicht auf die RETURN Taste, so dass der Fokus zum nächsten Objekt wechselt. Ah ja, auch kein Problem: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 SendKeys "{TAB}", True End If End Sub Alles Richtig, alles kein Problem... Jetzt hat man aber nicht selten 10-20 Textboxen auf der Form. Also den Code in GotFocus und KeyPress 10-20 mal schreiben. Das ist schon ein Problem, denn das bläht den Code doch sehr auf und es wird unübersichtlich. Wäre es nicht besser, man bräuchte den Code nur einmal zu schreiben, egal wie viele Textboxen sich auf der Form befinden? Doch wie lässt sich das realisieren? Die Lösung hierfür heißt "TextBox mit Klasse!". Was ist das und wie geht das? Klasse bedeutet in diesem Fall nichts anderes, als ein Objekt in einem Klassenmodul zu kapseln, so dass alle Eigenschaften, Methoden und Events des betreffenden Objekts zunächst an die Klasse und erst dann an die aufrufende Form geleitet werden. Jetzt ist es ein Leichtes, seinen eigenen Code an das Objekt zu binden. Das nachfolgende Klassenmodul cTextBox zeigt Ihnen wie das geht. Es verfügt über folgende Eigenschaften:
Und so wird es gemacht: Legen Sie in einem neuen Projekt ein leeres Klassenmodul an. Benennen Sie das Klassenmodul cTextBox und fügen Sie den folgenden Code in das Klassenmodul ein. Option Explicit ' TextBox mit Ereignisse Public WithEvents TxtBox As TextBox ' Öffentliche Variablen Public MaxLen As Long Public AutoSelStart As Boolean ' Private Variable Private oText As String ' Klasse Initialisieren Private Sub Class_Initialize() MaxLen = 256 AutoSelStart = True End Sub Private Sub TxtBox_GotFocus() ' Die Textbox mit dem neuen Style belegen. With TxtBox oText = .Text If AutoSelStart Then .SelStart = 0 .SelLength = Len(.Text) End If End With End Sub Private Sub TxtBox_KeyDown(KeyCode As Integer, _ Shift As Integer) With TxtBox Select Case KeyCode ' Prüfen ob F2 gedrückt wurde, dann den Text demarkieren ' und an das Textende springen. MS-Office like... Case vbKeyF2 And Shift = 0 If .SelLength > 0 Then .SelLength = 0 .SelStart = Len(.Text) End If ' Prüfen ob CTRL-O gedrückt, dann den ' Original-Text wiederherstellen Case vbKeyO And Shift = 2 .Text = oText ' Alle anderen Zeichen an die Textbox durchlassen. Case Else End Select End With End Sub Private Sub TxtBox_KeyPress(KeyAscii As Integer) ' Prüfen ob RETURN gedrückt wurde, dann mit ' SendKeys {TAB} die Textbox verlassen. If KeyAscii = 13 Then KeyAscii = 0 SendKeys "{TAB}", True ' Prüfen ob die maximale Textlänge erreicht ist. ElseIf KeyAscii <> vbKeyBack Then If Len(TxtBox.Text) >= MaxLen Then KeyAscii = 0 End If End Sub Wie wird jetzt das Klassenmodul in Ihren eigenen Projekten verwendet? Hier ein Beispiel dazu: Fügen Sie in dem neu erstellten Projekt auf der Form1 vier Textboxen hinzu (Text1 - Text4). Kopieren Sie den folgenden Code in das Codefenster der Form1: Option Explicit ' Anzahl aller Textboxen auf der Form Private Const AnzTextBoxen = 4 Private sTextBox(1 To AnzTextBoxen) As New cTextBox Private Sub Form_Load() ' Klassen instanzieren Set sTextBox(1).TxtBox = Text1 Set sTextBox(2).TxtBox = Text2 Set sTextBox(3).TxtBox = Text3 Set sTextBox(4).TxtBox = Text4 ' Text1 auf max 20 Zeichen setzen sTextBox(1).MaxLen = 20 ' Text4 die automatische Markierung unterdrücken sTextBox(4).AutoSelStart = False ' Textboxen vorbelegen Text1.Text = "Advanced" Text2.Text = "Textbox" Text3.Text = "mit" Text4.Text = "Klasse" End Sub Passen Sie das Klassenmodul cTextBox an Ihre persönlichen Bedürfnisse an. Fügen Sie z.B. Code für LCASE und UCASE hinzu, oder lassen Sie nur numerische Werte in der Textbox zu. Und und und ... Einen kleinen Wehrmutstropfen hat das Klassenmodul. Es werden keine Textbox Arrays (Index) unterstützt. Ein erweitertes Klassenmodul mit solchen Eigenschaften und mehr wie z.B. einen Hover-Effekt finden Sie im beigefügten Demoprojekt. Das Demoprojekt. Viel Spaß... |