none
Zweites Design für Forms RRS feed

  • Frage

  • Hallo,

    ich möchte bei meinem Programm zwei Designs erstellen: hell & dunkel.

    Wenn der Nutzer auf hell klickt soll das Programm auch hell erscheinen und andersrum. Doch jeden einzelnen Button, jedes einzelne Textfeld, jedes einzelne Formular etc. gibt viel zu viel Code den man schreiben muss. Kann man nicht sagen:

    alle Elemente.Eigenschaft=neue Eigenschaft;

    Samstag, 18. Januar 2014 19:32

Antworten

  • Hallo,
    wenn die Eigenschaft wirklich überall gleich heißt, gibt es eine Möglichkeit. Du kannst in dem Fall alle Elemente durch gehen und deren Eigenschaft setzen. Bei Containern (wie Panel) musst du natürlich deren Unter-Controls auch mit setzen:

    private void button1_Click(object sender, EventArgs e)
    {
        SetBackColor(this, Color.Red);//Aufruf
    }
    
    void SetBackColor(Control container, Color backColor)
    {
        foreach (Control c in container.Controls)
        {
            if (c.Controls.Count > 0)
                SetBackColor(c, backColor);//Unterelement gefunden
            else
                c.BackColor = backColor;//Hintergrundfarbe setzen
        }
    }

    Je nachdem, was genau du vorhast musst du natürlich die Methode abändern.

    Ob sich das alles jedes in WinForms wirklich lohnt mag ich zu bezweifeln. In WPF könnte man allgemeine, komplett frei anpassbare Styles für jedes CDontrol schreiben. Diese zählen dann immer. Dort wäre eine Designänderung in 3 Zeilen abgetan. WPF benötigt aber auch eine gewisse einarbeitungszeit. Wenn du mehr wissen willst: Einführung in WPF


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Fragender99 Sonntag, 19. Januar 2014 10:47
    Samstag, 18. Januar 2014 20:22
    Moderator