2016-09-20 1 views
4

Ich mache einige Validierungsfunktionen für mein Projekt, aber ich bin auf etwas fest. Ich möchte eine einzelne Funktion haben, um ein paar verschiedene Kontrollen und Fehler zu behandeln.
Hier ist mein Code:Get c.SelectedItem in Controls C#

private void ValidateControls(Control c) 
{ 
    if (c is TextBox) 
    { 
     if (c.Text == "") 
     { 
      epNew.SetError(c, "Something"); 
     } 
    } 
    else if (c is ComboBox) 
    { 
     // What now? 
     // if (c.SelectedItem == null) does not work 
    } 

} 

Und ich es so nenne:

private void txtNEAN_Validating(object sender, CancelEventArgs e) 
{ 
    ValidateControls(txtNEAN); 
} 

Diese für Textfelder gut funktioniert. Aber wenn ich es tue:

private void cbbEMerk_Validating(object sender, CancelEventArgs e) 
{ 
    ValidateControls(cbbEMerk); 
} 

if (c.SelectedItem == null) zum Beispiel funktioniert nicht.
Wie kann ich das erreichen? Und ist das in Ordnung? Wenn nicht, was ist eine bessere Alternative?
Ich würde gerne etwas hören!

Antwort

6

Sie haben c zu einem ComboBox in diesem Fall

else if (c is ComboBox) 
    { 
     if (((ComboBox)c).SelectedItem == null) 
    } 

Durch die Art und Weise zu werfen, keine _Validating Methode für jede Kontrolle schaffen, wenn sie das gleiche tun. Sie können eine einzelne oder eine txtBox_Validating für Textfelder verwenden, ein comboBox_Validating für Comboboxen usw.

+0

Dank sehen! Ich werde es so bald wie möglich markieren. – Sj03rs

+1

Sie können auch lesen https://msdn.microsoft.com/en-us/library/ms950965.aspx (nicht sicher, ob Sie mit WinForms arbeiten, aber trotzdem) –

+0

Auch müssen Sie nicht wie es zu werfen 'if (((ComboBox) c) .SelectedItem == null)'? Sonst gibt es mir einen Fehler, dass ComboBox nicht als Methode verwendet werden kann. – Sj03rs

2

Versuchen

((ComboBox)c).SelectedItem 

stattdessen verwenden. Dies weist das Programm an, das Steuerelement c in eine ComboBox zu analysieren.

Als Alternative statt is verwenden Sie as

// Converts c to a ComboBox. If c is not a ComboBox, assigns null to cmbControl 

ComboBox cmbControl = c as ComboBox; 
if (cmbControl != null) 
{ 
    if (cmbControl.SelectedItem != null) 
    { 
     // Do stuff here 
    } 
} 
// Else it's not a ComboBox 
1

nutzen könnten Es ist auch gut über die Sicherheit Guss wissen, wie mit und ist:

Da Objekte polymorph sind, ist es möglich für eine Variable eines Basisklassentyps, um einen abgeleiteten Typ zu halten. Um auf die Methode des abgeleiteten Typs zuzugreifen, müssen Sie den Wert in den abgeleiteten Typ zurückübertragen. Wenn Sie jedoch in diesen Fällen eine einfache Umwandlung anstreben, besteht die Gefahr, dass eine InvalidCastException ausgelöst wird. Deshalb stellt C# das Ist und als Operator zur Verfügung. Sie können diese Operatoren verwenden, um zu testen, ob eine Umwandlung erfolgreich ist, ohne dass eine Ausnahme ausgelöst wird. Im Allgemeinen ist der as-Operator effizienter, da er den Cast-Wert zurückgibt, wenn die Umwandlung erfolgreich durchgeführt werden kann. Der Operator is gibt nur einen booleschen Wert zurück. Es kann daher verwendet werden, wenn Sie nur den Typ eines Objekts bestimmen möchten, aber nicht müssen.


Sie können für die Anregungen und die Antwort mehr here