C# BackColor per Klasse änderen

DichterNebel

Cadet 4th Year
Registriert
Apr. 2009
Beiträge
66
Hi,
ich möchte über einen Button die Hintergrundfarbe einer Formsanwendung ändern.
Die Methode zum ändern befindet sich in der Klasse "Status".
Studio schmeißt auch keinen Fehler beim Ausführen aber es ändert auch nicht die Farbe.
Um auf BackColor zugreifen zu können hab ich einfach die Status Klasse von der Form1 Klasse erben lassen, kA ob das der richtige Weg ist.
Hier mal der C# Code:

Code:
   public  partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Status Green = new Status();
            Green.setcolor();           
        }
    }
}

Code:
 class Status : Form1
    {
        public void setcolor()
        {
            {
                BackColor = System.Drawing.Color.Green;
            }
        }
    }
 
Hi,

siehe hier.

Dein Objekt "Green" erbt von Form1 und ist nicht Form1. Das ist ein Unterschied. Daher ändert sich natürlich nicht die Farbe von Form1.

VG,
Mad
 
Green ist ein neues Objekt, das hat auf die Form selbst keinen Einfluss.
 
Soweit ich das sehe, erzeugst du dort eine neue Instanz einer Klasse (unabhängig was sie erbt).
Diese Instanz hat zwar die selben Methoden etc. aber die sind nunmal eigenständig und geben nichts zurück, schon gar nicht an eine Instanz der Parent Class.
 
Danke für die schnellen Antworten.
Ein neues Objekt, will ich aber eigentlich gar nicht, oder ? :D
 
Hi,

kommt drauf an was genau du machen willst. Wenn du die Hintergrundfarbe von "Form1" ändern willst dann nein, natürlich nicht!

VG,
Mad
 
Code:
   public  partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Status Green = new Status();
            Green.setcolor(this);           
        }
    }

Code:
 class Status
    {
        public void setcolor(Form form)
        {
            {
                form.BackColor = System.Drawing.Color.Green;
            }
        }
    }

So schon eher. Oder halt als Extension. Wobei ich jetzt nciht weis, warum du das in eine eigene Klasse haben möchstest.
 
Zuletzt bearbeitet:
Hi,

Code:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
this.BackColor = System.Drawing.Color.Green;
}
}
}

Warum ein neues Objekt erzeugen, dem die Form mitgeben und dann mit der Übergabe arbeiten? Vollkommen von hinten durch die Brust ins Auge.

VG,
Mad
 
Ich nehme an er ist Einsteiger (erkennbar u.A. am Codestyle) und will bissl mit Klassen/Objekten experimentieren.
 
Hi,

aber dann sollte er es richtig lernen :) Sich ein Objekt einer Klasse zu erzeugen, dem ein anderes Objekt mitzugeben und dann in einer Methode von Objekt A mit Objekt B weiter zu arbeiten halte ich für vollkommen realitätsfremd.

VG,
Mad
 
Ja, Einsteiger und ja nur zum spielen.
Die MSDN Lösung kannte ich schon, wollte es aber in eine Klasse auslagern.

@Thaxll'ssillyia
Was genau passiert denn eigentlich hier :
Code:
 public void setcolor(Form1 form)
Und was genau spricht den gegen mein CodeStyle ? :D
Und: DANKE !!!
 
Hi,

du übergibst der Methode "setcolor" das Objekt "Form1" (also das Hauptfenster) und kannst dann in der Methode "setcolor" auf das Hauptfenster (also den Übergabeparameter "form") zugreifen.

Was gegen deinen "CodeStyle" spricht habe ich weiter oben ja schon geschrieben ;)

VG,
Mad
 
Und was genau spricht den gegen mein CodeStyle ? :D

- Variablennamen sollte man nie groß schreiben außer sie sind public static (z.B. bei Singleton-Pattern). Dient zur Unterscheidung von Klassen.
- Klassennamen sinnvoll wählen, "Form1" lieber MainForm oder CustomForm benennen (dann aber auch den Filename entsprechend anpassen). Das gleiche gilt für deinen Button samt event.
- Methode am Anfang groß schreiben
- Bei Methoden mit Nullable-Parametern immer auf Null prüfen!
- Xml-Dokumentation aller Methoden und Klassen!
Ergänzung ()

Also ungefähr so (eigene Klasse hab ich jetzt mal drin gelassen):

Code:
   /// <summary>
   /// Das Hauptformular.
   /// </summary>
   public  partial class MainForm: Form
    {
          /// <summary>
   /// Standard-Konstruktor.
   /// </summary>
        public MainForm()
        {
            InitializeComponent();
            
        }

        private void ButtonChangeColorClick(object sender, EventArgs e)
        {
            ColorHelper colorHelper= new ColorHelper();
            colorHelper.Setcolor(this);           
        }
    }

Code:
   /// <summary>
   /// Eine Klasse die Farbänderungen an einem Formular durchführen kann.
   /// </summary>
internal class ColorHelper
    {
        /// <summary>
        /// Das Hauptformular.
        /// <param name=form> Das  Formular, dessen Farben verändert werden sollen</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// </summary>
        public void Setcolor(Form form)
        {
            if (form== null) {
                throw new ArgumentNullException("form");
            }
            form.BackColor = System.Drawing.Color.Green;
        }
    }

(Sorry, hab die Xml-Doku jetzt ausm kopf mit der Textdatei erstellt, da ich grad VS nich offen hab)
 
Zuletzt bearbeitet:
Zurück
Oben