Frage

Ich habe ein in meiner Winforms-Anwendung namens Settings.settings mit einer Teilklasse für benutzerdefinierte Methoden „Einstellungsdatei“ usw. Gibt es eine Möglichkeit auf beliebige Tasten dynamische Einstellungen basierend zu laden / speichern?

Zum Beispiel habe ich einige Listviews in meiner Anwendung, in der ich mag die Spaltenbreiten speichern / laden; Statt eine Breite für jede Spalte für jede Listenansicht Einstellung der Erstellung würde ich eine einfache Methode, wie die Breite automatisch zu laden / speichern.

Im Folgenden finden Sie ein Beispiel für die Speichern Methode, die ich versucht habe:

internal sealed partial class Settings
{
    public void SetListViewColumnWidths(ListView listView)
    {
        String baseKey = listView.Name;
        foreach (ColumnHeader h in listView.Columns)
        {
            String key = String.Format("{0}-{1}", baseKey, h.Index);
            this[key] = h.Width;
        }
    }
}

Wenn Sie sich diesen Code ausgeführt erhalte ich die Fehler "Die Einstellungen Eigenschaft 'TestsListView-0' wurde nicht gefunden." Gibt es etwas, was ich bin fehlt?

War es hilfreich?

Lösung

Speichern Sie Ihre Spaltenbreite Einstellungen in einem XML-Serializable Objekt. Das heißt, etwas, das IXmlSerializable dann erstellen eine einzige Einstellung Eintrag dieses Typs in Settings.settings.

Eine gute Option wäre wahrscheinlich ein Xml Serializable Wörterbuch sein. Ein schneller Google-Suche ziemlich viele verschiedenen Blog-Posts gefunden, dass beschreiben, wie das implementieren.

Wie in anderen Antworten erwähnt werden Sie sicherstellen müssen, dass dieses Objekt eine Benutzereinstellung ist. Sie können auch die Einstellung Instanz initialisieren müssen. Dh eine XmlSerializableDictionary () Instanz erstellen und an die Einstellung zuweisen, wenn die Einstellung null ist. Die Einstellungen Subsystem erstellt keine Standardinstanzen von komplexen Einstellungsobjekte.

Auch wenn Sie diese Einstellungen wollen zwischen Montage Versionen bestehen bleiben (dh sein aktualisierbar) können Sie die Einstellungen auf Anwendungsstart aktualisieren müssen. Dies wird im Detail beschrieben auf Miha Markič des Blog und Raghavendra Prabhus Blog.

Andere Tipps

Ich denke, der Fehler

  

Die Einstellungen Eigenschaft   'Schlüssel' wurde nicht gefunden.

tritt auf, weil der ‚Schlüssel‘ Wert nicht in Ihrer Einstellungsdatei vorhanden ist (selbsterklärend).

Soweit ich weiß, können Sie keine Einstellungen Werte programmatisch hinzufügen, müssen Sie möglicherweise das Hinzufügen aller Einstellungen untersuchen Sie schließlich auf die Datei benötigen, obwohl, wenn sie dort sind, ich glaube, Sie in der Lage sein werden die Art von Code zu verwenden, die Sie speichern Änderungen gegeben haben.

Änderungen zu speichern, müssen Sie sicherstellen, dass sie ‚User‘ Einstellungen, nicht ‚Anwendung‘.

Die Einstellungsdatei ist ganz einfach XML, so dass Sie vielleicht das Problem in Angriff, indem er die Schreiben von XML direkt in die Datei, aber ich habe es nie getan, so kann nicht sicher sein, dass es funktionieren würde, oder unbedingt empfehlen Dieser Ansatz.

http://msdn.microsoft.com/en-us/library /cftf714c.aspx ist die MSDN Verbindung mit zu beginnen.

Sie können tun Settings.Save () oder ähnliches auf Benutzereinstellungen, aber beachten Sie, dass solche Einstellungen nicht auf die xxx.exe.config Datei in Ihrem App-Verzeichnis erhalten beibehalten würde, wie man es erwarten würde. Sie gehen tatsächlich irgendwo tief im Benutzerordner (Ihr Laufwerk für xxx.exe.config suchen, sie zu finden). Die nächste Mal, die Sie manuell xxx.exe.config in Ihrem App-Verzeichnis ändern, wird die Änderung auf mysteriöse Weise nicht gelten (das System noch die gespeicherte einen aus dem Benutzerverzeichnis verwenden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top