2009-07-12 14 views
0

Ich entwickle eine Windows-Anwendung.Behalten Sie die Änderungen an der Backcolor-Eigenschaft

Ich habe 3 Formen:

Ich möchte die Hintergrundfarbe aller drei Formen auf die Farbe, die durch den Benutzer ausgewählt ändern.

Ich habe den folgenden Code verwendet Ich bin in der Lage, die Hintergrundfarbe zu ändern, aber wenn ich die Anwendung beenden und neu starten, kann ich die Farbe, die der Benutzer festgelegt hat, nicht abrufen. Ich erhalte nur die Standardfarbe.

Ist es möglich, die vom Benutzer ausgewählte Farbe beizubehalten und sie als Hintergrundfarbe zu verwenden, wenn der Benutzer die Anwendung neu startet?

CODE

In Form1

ColorDialog c1 = new ColorDialog(); 

    public static System.Drawing.Color bkc; 
    private void button1_Click(object sender, EventArgs e) 
    { 

     DialogResult res = c1.ShowDialog(); 
     if (res == DialogResult.OK) 
     { 
      bkc = c1.Color; 
      this.BackColor = bkc; 


      MessageBox.Show(Convert.ToString(bkc)); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Form2 obj1 = new Form2(); 
     obj1.BackColor = bkc; 
     obj1.Show(); 
    } 

In Form 2 CODE

private void button2_Click(object sender, EventArgs e) 
    { 
     Form3 obj1 = new Form3(); 
     obj1.Show(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     this.BackColor = Form1.bkc; 

    } 

In Form3 CODE

private void button2_Click(object sender, EventArgs e) 
    { 
     Form1 obj1 = new Form1(); 
     obj1.Show(); 
    } 

    private void Form3_Load(object sender, EventArgs e) 
    { 
     //Form1 obj2 = new Form1(); 
     this.BackColor = Form1.bkc; 
    } 

Im Farbdialog wähle ich eine Farbe aus und drücke OK, die Farbe wird auch geändert, aber wenn ich die Anwendung neu starte, bekomme ich nicht die Farbe, die ich mit dem Farbdialog eingestellt habe. Ich möchte diese Einstellung behalten, damit der Benutzer es bekommt die gewünschte Farbe, ohne sie jedes Mal neu zu starten, wenn die Anwendung ausgeführt wird.

Der obige Code erzeugt keinen Fehler.

Kann mir jemand bei der Ausführung dieser Aufgabe helfen?

Vielen Dank im Voraus!

Antwort

-1

Sie machen es falsch.

Wie wird sich die Anwendung an die Wahl der Hintergrundfarbe erinnern?
Die App läuft im Speicher & zeigt ausgewählte Backcolor bis es beendet ist.

Lesen Sie weiter this & nehmen Sie es vorwärts.

EDIT: Es ist auch nicht richtig, Form1.BackColor in Form2 zu verwenden.
Öffnen Sie Form1, ändern Sie die Backcolor, schließen Sie Form1 & Öffnen Sie Form2, um zu sehen, was passiert (möglicherweise sehen Sie, dass Form1 erneut geöffnet wird).

+1

Das Schema der Anwendungseinstellungen ist nicht der * sehr * letzte Ort, an dem ein Entwickler, der neu in der Idee der Benutzereinstellungen ist, suchen sollte, aber es ist nah dran. –

+0

Ich habe nicht viel Wissen über Einstellungsdatei. Gibt es einen anderen Weg? – Sheetal

3

Sie müssen den Wert irgendwo wie die Application.exe.config speichern:

// Open App.Config of executable 
    System.Configuration.Configuration config = 
    ConfigurationManager.OpenExeConfiguration 
       (ConfigurationUserLevel.None); 

    // Add an Application Setting. 
    config.AppSettings.Settings.Add("BackgroundColour", 
        bkc + " "); 

    // Save the changes in App.config file. 
    config.Save(ConfigurationSaveMode.Modified); 

    // Force a reload of a changed section. 
    ConfigurationManager.RefreshSection("appSettings"); 

Hier ist ein C# vollständiges Codebeispiel: Using System.Configuration.ConfigurationManager Example

+0

Alter, Sie sind so schnell, dieses Stück Code zu schreiben, muss ich sagen :) – shahkalpesh

+0

um ganz ehrlich zu sein, fand ich es auf MSDN! –

0

Warum nicht Sie ein Ereignis erstellen, dass alle drei Formen hören und Sie können die Hintergrundfarbe ändern, wenn Sie das Ereignis "Farbe ändern" hören. Und Sie könnten die Farbe in einer statischen Variablen speichern, so dass beim Laden des Formulars die Hintergrundfarbe auf die in der Variablen gespeicherte Farbe gesetzt werden kann.

Damit der Bildschirm die Farbeinstellungen speichert, speichern Sie die ausgewählte Farbe in einer Benutzervorgabedatei. Probieren Sie die "IsolatedStorage" -Funktion aus, um eine Einstellungsdatei zu speichern.

+0

Hier ist ein Link zu einem guten Artikel über das Speichern von Benutzereinstellungen in isolierten Speicher: http://www.codeguru.com/csharp/csharp/cs_data/article.php/c4225 – Madeleine

+0

Dieser Artikel ist, um es milde auszudrücken, veraltet. –

1

Der Vorschlag, die Anwendungskonfigurationsdatei zu verwenden, ist knapp, aber zwei Dinge sind falsch.

Zuerst teilen alle Benutzer der Anwendung dieselbe Anwendungskonfigurationsdatei. Wenn Sie mehrere Benutzer haben (z. B. in einem Netzwerk oder auf einem anderen Computer), wird durch das Speichern einer Benutzereinstellung in der Anwendungskonfigurationsdatei diese Einstellung für alle Benutzer geändert. Eine zweite Sache, die falsch ist, ist, dass es unter einer Standardinstallation unter Vista sowieso nicht funktioniert: Standardmäßig gibt Vista dem Benutzer keinen Schreibzugriff auf irgendetwas unter dem Verzeichnis Program Files, so dass Änderungen an der Anwendungskonfigurationsdatei gespeichert werden eine Ausnahme.

Die richtige Antwort ist, Benutzereinstellungen zu verwenden. Diese werden in der Benutzereinstellungsdatei der Anwendung gespeichert, die sich in einem (tief verschachtelten und OS-Versionsabhängigen) Unterverzeichnis des Benutzerverzeichnisses des Benutzers befindet. Die ConfigurationManager lädt diese Einstellungen zur Laufzeit und ermöglicht es Ihnen, sie in Ihrem Code zu aktualisieren und zu speichern. In Visual Studio ist eine ganze Infrastruktur integriert, um dies (relativ) einfach zu machen, was gut ist, da es bei der ordnungsgemäßen Ausführung eine unheimliche Menge Code gegen die Klasse ConfigurationManager schreibt. So funktioniert es:

Wenn Sie unter den Eigenschaften Ihres VS-Projekts nachsehen, sehen Sie einen Eintrag mit der Bezeichnung Settings.settings. Wenn Sie darauf doppelklicken, wird Ihnen ein Raster angezeigt, in dem Sie Ihrem Projekt Einstellungen hinzufügen können. Sie geben den Namen der Einstellung an, wählen den Datentyp und den Standardwert und, im entscheidenden Fall, den Bereich. Die Einstellung kann Anwendungsumfang sein. In diesem Fall wird der Wert allen Benutzern der Anwendung gemeinsam und in der Anwendungskonfigurationsdatei gespeichert. Oder es kann ein Benutzerbereich sein, in welchem ​​Fall jeder Benutzer seinen eigenen Wert für die Einstellung haben kann, und die Einstellung wird in der Benutzereinstellungsdatei gespeichert.

Wenn Sie diesem Raster eine Einstellung hinzufügen, generiert VS Code, um die Einstellung für Ihren Code verfügbar zu machen. Im Grunde erstellt es eine Klasse, die diese Einstellungen Ihrem Code als Eigenschaften eines Singleton-Objekts zur Verfügung stellt. (Sie können diesen Code sehen, wenn Sie wissen möchten, was Sie davon abhalten, selbst zu tun; er wird in der Datei 'Settings.Designer.cs' gespeichert, die in der Projektansicht unter 'Einstellungen.Einstellungen' erstellt wurde.) Diese Klasse wird auch jedes Mal neu generiert, wenn Sie die Informationen im Raster Einstellungen ändern. Sobald Sie eine Einstellung in der Raster-Einstellungen erstellen, können Sie es in Ihrem Code verweisen thusly:

ctl.BackColor = Properties.Settings.Default.BackColor; 

Benutzereinstellungen von Ihrem Code geändert werden können:

Properties.Settings.Default.BackColor = newBackColor; 

Und Sie können sie für den Benutzer speichern Einstellungsdatei wie folgt:

Wenn diese Einstellungen als Eigenschaften einer Klasse verfügbar gemacht werden, ist dies aus vielen Gründen nützlich. Eine der wichtigsten ist, dass, da sie Eigenschaften sind (und nicht etwa Wörterbucheinträge, auf die mit einem Schlüssel zugegriffen wird, so funktioniert der meiste Code, den die Leute gegen die Klasse ConfigurationManager schreiben), die Kompilierungszeit der Namen Verwenden Sie in Code. Sie werden nie zur Laufzeit ein NullReferenceException bekommen, wenn Sie den Namen einer Einstellung falsch schreiben; Sie erhalten einen Fehler, wenn Sie es stattdessen kompilieren.

Es gibt einige Feinheiten bei der Verwendung von Benutzereinstellungen. Eine der weniger offensichtlichen ist: Was passiert, wenn Sie eine neue Version der Software erstellen?Die Benutzereinstellungen werden in einem Verzeichnis gespeichert, das mit der Versionsnummer des Programms verknüpft ist. Wenn Sie eine neue Version veröffentlichen, ist die Datei mit den Benutzereinstellungen nicht vorhanden. Wie hält man den Benutzer davon ab, alle seine Einstellungen zu verlieren, wenn er das Programm aktualisiert?

Dies ist auch in der Settings Klasse eingebaut; alles, was Sie tun müssen, ist dies:

if (Properties.Settings.Default.UpgradeSettings) 
{ 
    Properties.Settings.Default.Upgrade(); 
    Properties.Settings.Default.UpgradeSettings = false; 
} 

Dies wird die Benutzereinstellungen aus der vorherigen Version in die Einstellungsdatei für die neue Version kopieren.

Verwandte Themen