Forum: VB.NET |
Thema:
Re: TAG-Eigenschaften in Textboxen mit "for ... each" ? |
Von:
Daniel Röber (
11.03.2005 14:07) |
Und da simma nochmal ...
Alsodele, ich hab mich dann mal so a weng hingesetzt und fogendes "ausgetüftelt":
Als erstes declariere ich eine gobale SortedList (direkt under dem Windows Form Designer Code). Die brauchen wir um die TextBoxen sortiert nach den TabIndex zu halten
Private cMyTextBoxes as SortedList
Form Load Event:
Hier wirds schon spannend *g*
Wir benutzen den uns schon bekannten code um die TextBoxen zu finden. Haben wir eine, fügen wir sie als ersten zu unserer SortedList hinzu, den TabIndex benutzen wir um die Stelle in der Liste festzulegen.
Danach fügen wir den globalen Handler für das TextChanged event hinzu und danach noch den globalen handler für den KeyPress event, welchen wir für die enter taste benutzen! Ganz ganz wichtig hierbei, die taborder!!! es dürfen keine ueberschneidungen da sein, d.h. keine textbox darf die den gleichen tabindex wie eine andere haben, sonst gibts nen fetten errror beim einfügen in die SortedList
cMyTextBoxes = New SortedList
For Each ctr As Control In Me.Controls
If TypeOf ctr Is TextBox Then
cMyTextBoxes.Add(ctr.TabIndex, ctr)
AddHandler ctr.TextChanged, AddressOf TextBox_TextChanged
AddHandler ctr.KeyPress, AddressOf TextBox_KeyPress
End If
Next
Dann der bekannte EventHandler für den TextChanged event
Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
'Sender = TextBox object
Me.Label1.Text += sender.Text
End Sub
Und zu guter letzt den globalen KeyPress eventhandler.
Chr(13) entrpicht der ENTER Taste! Die ertse If schleife checkt ob eben diese taste gedrückt wurde, simpel :P
Dann deklarieren wir eine TextBox und ein Integer (zur weiteren Benutzung)
Jetzt finden wir den ItemIndex der TextBox, welche das event ausgeloest hat (Sender) und addieren 1 hinzu um das nächtse item in der liste zu erreichen.
Sodele, jetzt wird gecheckt ob die gesamtanzahl der objects in der SortedList größer ist, als das nächste item, wenn nicht, dann gibt es dieses item nicht (wir haben ja schon 1 zum momentanen item hinzuaddiert).
Falls es dieses item doch gibt, holen wir uns dieses, setzten die oben deklarierte TextBox (cText) zu dem item in der SortedList. Falss nicht, holen wir uns das erste item aus der sortedlist(oder was auch iimmer du machen willst)
Am ende wird noch der focus gesetzt und e voila ... da isset schon :P
Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If e.KeyChar = Chr(13) Then
Dim cText As TextBox
Dim iNextItem As Integer
iNextItem = cMyTextBoxes.IndexOfKey(sender.TabIndex) + 1
If cMyTextBoxes.Count > iNextItem Then
cText = cMyTextBoxes(iNextItem)
Else
cText = cMyTextBoxes.Item(0)
End If
cText.Focus()
End If
End Sub
Ach ... bezahlen tut mir das hier auch keiner .... mh, naja, so ganz richtig ist das ja auch nicht, mein Arbeitgeber bezahlt mich ja ...*g*, aber der lässt mich grad im Kreis drehen und da kommt so eine kleine Abwechslung ganz recht.
Hoffe es war nicht zu verwirrend.
Happy Programming
DANiEL
Betreff |
Von |
Datum |
|
|
Frank
Steinbrink
|
13.03.2005 13:46 |
|
|
Daniel
Röber
|
13.03.2005 17:53 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!