2016-11-07 3 views
-1

Ich erstelle ein Formular mit mehreren Feldern: Textfelder, Kontrollkästchen, DropBoxes Numerische UpDowns.Gemeinsamer Ereignishandler für mehrere Steuerelemente verschiedener Typen in C#

Wenn Formular lädt, hole ich die Datenbank und fülle mit vorhandenen Daten.

Wenn Benutzer ein Feld ändert, muss ich diese Informationen an die Datenbank senden.

Gerade jetzt, ich habe ein Ereignis für jedes Steuerelement (3 checkedChanged, 4 TextChanged, 3 ValueChanged und 2 SelectedIndexChanged).

Ich habe ein Array von bool, in dem ich Variable auf True festgelegt und ändern Sie die Farbe zurück.

bool[] bChangedValues = new bool[12]; 

private void tbName_TextChanged(object sender, EventArgs e) 
{ 
    tbName.BackColor = CHANGED_COLOUR; 
    // Set the flag to true to indicate value is changed 
    bChangedValues [Name_Index] = true; 
} 

private void chIEnable_CheckedChanged(object sender, EventArgs e) 
{ 
    chIEnable.BackColor = CHANGED_COLOUR; 
    // Set the flag to true to indicate value is changed 
    bChangedValues [IEnable_Index] = true; 
} 

und so weiter ...

, wenn Benutzer auf Speichern klicken, werde ich dieses Array analysieren und Befehle in die Datenbank mit neuen Werten senden.

Ich weiß, dass dies eine schlechte Implementierung ist. Ein gewöhnlicher Event-Handler wird viel einfacher. Ich sah this Antwort und fand es für mein Problem geeignet. Aber wie kann ich auf Eigenschaften wie BackColor usw. von sender zugreifen?

Ich brauche eine Möglichkeit, mehrere Event-Handler unterschiedlicher Steuerelementtypen in einem zusammenzufassen und auch auf Eigenschaften des Controls in diesem Event-Handler zuzugreifen.

I C# bin mit .NETFramework 4.0

+1

Cast Sender zu 'Control' Typ:' ((Control) Sender) .BackColor'. Diese Steuerelemente erben von "Control" und "Control" haben die Eigenschaft "BackColor". – Fabio

+0

@Fabio Danke !! Funktioniert perfekt!! Deshalb liebe ich StackOverflow :-) – Swanand

Antwort

1

Wenn Sie Namen des Index zum Tag Kontrolle hinzufügen, dann können Sie bChangedValues setzen.

private void Control_ValueChanged(object sender, EventArgs e) 
{ 
    var control = (Control)sender; 
    control.BackColor = CHANGED_COLOUR; 
    bChangedValues[control.Tag] = true; 
} 
Verwandte Themen