Jaki jest najlepszy sposób, aby rozwiązać następujący problem?Kontrola leczenia jako ComboBox lub TextBox
foreach (Control control in this.Controls)
{
if (control is ComboBox || control is TextBox)
{
ComboBox controlCombobox = control as ComboBox;
TextBox controlTextbox = control as TextBox;
AutoCompleteMode value = AutoCompleteMode.None;
if (controlCombobox != null)
{
value = controlCombobox.AutoCompleteMode;
}
else if (controlTextbox != null)
{
value = controlTextbox.AutoCompleteMode;
}
// ...
}
}
Widzisz, że jest to wystarczająco skomplikowane, aby uzyskać właściwość AutoCompleteMode. Możesz założyć, że mam gwarancję, że mam ComboBox lub TextBox.
Moim pierwszym pomysłem było użycie generic z wieloma rodzajami dla T, ale wydaje się, że nie jest to możliwe w .NET:
public string GetAutoCompleteModeProperty<T>(T control) where T: ComboBox, TextBox // this does not work, of course
Niestety obie Kontrolą nie mają wspólną klasę bazową .
Uwaga: Jest to ogólne pytanie używane w przypadku zminimalizowanego przykładu. W moim przypadku chcę również uzyskać dostęp do innych funkcji autouzupełniania * lub manipulować nimi (które również mają wspólną kontrolę).
Dzięki za pomysły!
Czy właściwość Tekst to jedyna rzecz, której szukasz? – Tim
Nie, to miało być bardziej ogólne pytanie. To był tylko zminimalizowany przykład. Używam również właściwości AutoComplete *.(Dodaję to teraz do pytania) –
Nie potrzebujesz zewnętrznej, jeśli nie? Jeśli "controlCombobox" ma wartość null, to nie jest to ComboBox itd. – MAV