Laden...

Hintergrundfarbe setzten für jedes Object in einer Form

Letzter Beitrag vor 3 Jahren 4 Posts 242 Views
Hintergrundfarbe setzten für jedes Object in einer Form

Hallo Forum,

ich möchte gern bei allen Objekten in einer Form beim "Enter" die Hintergrundfarbe festlegen und bei "Leave" die Farbe wieder zurücksetzten
So kann der User besser sehen, in welchem Objekt er gerade steht.

Versuch


private void Form1_Load(object sender, EventArgs e)
        {
foreach (Control c in this.Controls)
            {
                c.Enter += Control_Enter;
            }
}
 private void Control_Enter(object sender, System.EventArgs e)
        {
            // wie kann ich hier das Objekt ansprechen welches die Hintergrundfarbe setzen soll
        }

Oder geht das so garnicht ?

Wäre für jeden Tipp dankbar

LG

Übersicht über Ereignishandler - Windows Forms .NET Framework

Der erste Parameter, sender , stellt einen Verweis auf das-Objekt bereit, das das Ereignis ausgelöst hat. Der zweite Parameter, e , im obigen Beispiel, übergibt ein Objekt, das für das behandelte Ereignis spezifisch ist.

Der sender Parameter enthält bei Controls eigentlich immer das Objekt, welches das Event ausgelöst hat. Um darauf Zugriff zu erhalten musst du es dann noch casten (siehe Casting and type conversions - C# Programming Guide).

In neueren C# Versionen gibt es dafür das pattern matching (siehe How to safely cast by using pattern matching and the is and as operators):


private void Control_Enter(object sender, System.EventArgs e)
{
    if (sender is System.Windows.Forms.TextBox textbox)
    {
        textbox.BackColor = Color.Red;
    }
}

Früher:


private void Control_Enter(object sender, System.EventArgs e)
{
    var textbox = sender as System.Windows.Forms.Textbox;
    if (textbox != null)
    {
        textbox.BackColor = Color.Red;
    }
}

Funktioniert ...

super Danke