So in etwa habe ich das gemeint ....
Es wird eine vorzugebende Zahl von Textboxen erstellt.
In der Combobox wird ausgewählt, welcher Filter beim
Eintragen von Zeichen zu verwenden ist ( = Verzweigung in
die passende Routine / der Handler muß nicht gewechselt werden).
Public Class DynamicControlDemo
Dim WithEvents ControlCountButton As New Button With _
{.Parent = Me, .Width = 200, .Text = "Zahl der Textboxen"}
Dim WithEvents BoxFunctionCombo As New ComboBox With _
{.Parent = Me, .Top = 50, .DropDownStyle = ComboBoxStyle.DropDownList}
Private Sub DynamicControlDemo_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(300, 600)
With BoxFunctionCombo
.Items.AddRange _
({"nur Ziffern", _
"nur Buchstaben (klein)", _
"nur Buchstaben (groß)"})
.SelectedIndex = 0
End With
End Sub
Private Sub ControlCountButton_Click(sender As Object, _
e As System.EventArgs) Handles ControlCountButton.Click
Dim inp As String = InputBox("Wie viele Textboxen?", Me.Name, " 3")
Dim c As Integer
If Not Integer.TryParse(inp, c) Then Exit Sub
If c < 1 Or c > 5 Then Exit Sub
ClearBoxes()
For i As Integer = 0 To c - 1
Dim tbo As New TextBox With _
{.Parent = Me, .Top = 50 * (i + 3), .Width = 200}
AddHandler tbo.KeyPress, AddressOf tbo_KeyPress 'feste Zuordnung
Next i
End Sub
Private Sub tbo_keypress(ByVal sender As Object, e As KeyPressEventArgs)
If Not Asc(e.KeyChar) = 8 Then
'Verzweigung
With BoxFunctionCombo
If .SelectedIndex = 0 Then
NurZiffern(DirectCast(sender, TextBox), e)
ElseIf .SelectedIndex = 1 Then
NurBuchstabenKlein(DirectCast(sender, TextBox), e)
Else
NurBuchstabenGross(DirectCast(sender, TextBox), e)
End If
End With
End If
End Sub
Private Sub NurZiffern _
(ByVal sender As TextBox, e As KeyPressEventArgs)
Dim ziffern As String = "1234567890"
If Not ziffern.Contains(e.KeyChar) Then e.Handled = True
End Sub
Private Sub NurBuchstabenKlein _
(ByVal sender As TextBox, e As KeyPressEventArgs)
Dim buchstaben As String = "abcdefghijklmnopqrstuvwxyz"
If Not buchstaben.Contains(e.KeyChar) Then e.Handled = True
End Sub
Private Sub NurBuchstabenGross _
(ByVal sender As TextBox, e As KeyPressEventArgs)
Dim buchstaben As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If Not buchstaben.Contains(e.KeyChar) Then e.Handled = True
End Sub
Private Sub ClearBoxes()
For i As Integer = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is TextBox Then
Me.Controls.RemoveAt(i)
End If
Next i
End Sub
End Class |