Durch Zufall fand ich auf diesem Link eine Lösung zu genanntem Problem. Ich zitiere mal den ursprünglichen Autoren: "Man merkt es, wenn man schnell mal eine Windows Form mit vielen Controls 'belegt' und dabei nicht auf die Reihenfolge geachtet hat. In diesem Beispiel gibt's eine TabStopSorter-Klasse, der man einfach eine Form im Konstruktor übergeben muss, und schon sind die TabStopps sortiert." Und genau das Problem hatte ich öfters schon- vor allem, wenn man die Controls in Anzahl und/oder Location im Zuge der Entwicklung immer mal verändern muss. Wenn man die folgende Klasse zur Verfügung hat, kann man eben schnell die richtige Tabstop-Reihenfolge herstellen. Ich habe den ursprünglichen Code noch etwas ergänzt. Man kann nun noch in einem Array angeben, welche Typen von Controls in die Sortierung einbezogen werden sollen. Die Klasse: Public Class TabStopSorter Public Sub New(ByVal StartControl As Control, _ Optional ByVal typCtrl() As Control = Nothing) Dim TmpListe As New List(Of Control) Dim i As Integer = 0 For Each C As Control In StartControl.Controls If typCtrl Is Nothing Then TmpListe.Add(C) Else For j As Short = 0 To typCtrl.Length - 1 Dim ty As Type = C.GetType If ty.Equals(typCtrl(j).GetType) Then TmpListe.Add(C) End If Next End If Next TmpListe.Sort(New ControlComparer) For Each C As Control In TmpListe C.TabIndex = I I += 1 If C.Controls.Count > 0 Then Dim x As New TabStopSorter(C) End If Next End Sub Private Class ControlComparer Implements IComparer(Of Control) Public Function Compare(ByVal x As Control, ByVal y As Control) As Integer _ Implements System.Collections.Generic.IComparer(Of Control).Compare If x.Top <> y.Top Then Return x.Top.CompareTo(y.Top) Else Return x.Left.CompareTo(y.Left) End If End Function End Class End Class Zwei Beispiele der Verwendung 1. So werden alle Controls auf einer Form Tabstop-mäßig sortiert: Dim ctrlSorter As New TabStopSorter(Me) 2. und so nur die Textboxen und Checkboxen Dim cy() As Control = {New TextBox, New CheckBox} Dim ctrlSorter As New TabStopSorter(Me, cy) Dieser Tipp wurde bereits 11.852 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |