Qual è il modo migliore per risolvere ?Considera il controllo come ComboBox o 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;
}
// ...
}
}
Vedete è complicato sufficiente per ottenere l'AutoCompleteMode-proprietà. Si può presumere che sia garantito che io abbia o un ComboBox o un TextBox.
La mia prima idea era quella di utilizzare generico con più tipi di T, ma sembra che questo non è possibile in .NET:
public string GetAutoCompleteModeProperty<T>(T control) where T: ComboBox, TextBox // this does not work, of course
Purtroppo entrambi i controlli non hanno una classe base comune .
Nota: Si tratta di una domanda più generale utilizzata con un esempio ridotto a icona. Nel mio caso, desidero anche accedere/manipolare altre proprietà di completamento automatico * (che anche entrambi i controlli hanno in comune).
Grazie per le idee!
La proprietà Text è l'unica cosa che cerchi? – Tim
No, questo doveva essere una questione più generale. Questo era solo un esempio minimizzato. Sto anche utilizzando il Completamento automatico * -proprietà.(Sto aggiungendo questo alla domanda ora) –
Non hai bisogno dell'esterno, vero? Se 'controlCombobox' è nullo, non è un ComboBox, ecc. – MAV