Zitat: |
Gibt es da eine einfache Abhilfe oder muss ich meine Methode zum erstellen der ComboBoxen zur Laufzeit ändern ?? |
Wenn du die Comboboxen zur Laufzeit erstellst spricht nichts dagegen sie einfach zusätzlich in eine Liste zu schreiben (z.B eine List<ComboBox>) um später damit zu arbeiten. Jetzt wirfst du die erst mit allen anderen Controls der Form zusammen um sie dann wieder über den Namen rauszupulen. Da du sie aber schon an der Hand hattest ist der Aufwand völlig unnötig. Best Practice wäre eh nie von dem Namen eines Controls abhängig zu sein. Weder muss ein Control einen Namen haben noch muss der eindeutig sein. Noch hat man, je nach Project, Einfluß darauf wie genau alle Controls der Form heißen.
Alternative wäre alle Comboboxen auf ein Container Control(Panel, GroupBox, Tab etc.) zu parenten und nicht direkt auf die Form zu packen. Dann weißt du genau alle Controls dieses Parent sind meine Comboboxen die mich interessieren. Alternative Alternative

wäre eine passende Find Implementierung zu schreiben die mit einem partiellen Namen umgehen kann. Z.B. folgende Extension Method
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public static class ControlHelper { public static IEnumerable<Control> FindByStartsWithName(this Control control, string name, StringComparison comparisonType = StringComparison.InvariantCultureIgnoreCase, bool searchAllChildren = false) { if (searchAllChildren) foreach (Control child in control.Controls) foreach (var subchild in FindByStartsWithName(child, name, comparisonType, searchAllChildren)) yield return subchild;
if (!string.IsNullOrWhiteSpace(name) && control.Name.StartsWith(name, comparisonType)) yield return control; } }
var comboboxes = this.FindByStartsWithName("comboBox", searchAllChildren: true).OfType<ComboBox>().ToArray(); |
Wenn du in alle Comboxen die gleichen Werte schreibst wäre es einfacher ebenfalls alle diese Werte in eine Liste zu schreiben und diese Liste einfach der ComboBox.DataSource Property zuzuweisen.