2016-09-13 3 views
0

Ich habe eine bearbeitbare ComboBox. Der Benutzer gibt einen Text ein und drückt auf die Schaltfläche Speichern. Ihr Text wird in eine Zeichenfolge umgewandelt.So erstellen Sie neue Benutzereinstellungen in der app.config zur Laufzeit

Ich brauche es zur Laufzeit, um eine neue Benutzereinstellung in der app.config mit dem Namen ihrer Zeichenfolge zu erstellen. (Ich denke dieser Teil funktioniert jetzt).

Dann wird das ausgewählte Element einer anderen ComboBox in der Einstellung gespeichert. (Objektverweis nicht gesetzt Fehler).

Hiermit erstellen Sie eine benutzerdefinierte Voreinstellung, die jeden Steuerstatus, Kontrollkästchen, Textfelder usw. im Programm speichert.

// Control State to be Saved to Setting 
Object comboBox2Item = ComboBox2.SelectedItem; 

// User Custom Text 
string customText = ComboBox1.Text; 

// Create New User Setting 
var propertyCustom = new SettingsProperty(customText); 
propertyCustom.Name = customText; 
propertyCustom.PropertyType = typeof(string); 
Settings.Default.Properties.Add(propertyCustom); 

// Add a Control State (string) to the Setting 
Settings.Default[customText] = (string)comboBox2Item; 

In diesem Teil bekomme ich einen Fehler.

Settings.Default[customText] = (string)comboBox2Item; 

Ausnahme: ausgelöst: „Objektverweis nicht auf eine Instanz eines Objekts festgelegt.“

Ich habe versucht, ComboBox1.Text zu einem Objekt anstelle von Zeichenfolge, mit demselben Fehler. Der Text und die Zeichenfolge sind ebenfalls nicht null.

Object customText = ComboBox1.Text; 

Hier ist eine visuelle, was ich versuche, Custom User Setting

+0

ohne zu überprüfen, müssen Sie wahrscheinlich die Config speichern, und es dann neu zu laden. Beachten Sie, dass viele Einstellungen, die Sie über den Code vornehmen, über eine Klasse vorgenommen werden, die Visual Studio beim Ändern der Konfiguration über den Designer generiert. Es gibt XML-Konfigurationsklassen, die Sie analysieren und die Konfigurationsdatei manuell ändern können. Es gibt jedoch kein XSD, um Ihre Änderungen zu validieren, bevor Sie sie speichern. Seien Sie vorsichtig, da Sie die Konfiguration in einen Zustand ändern können, in dem Ihre Anwendung aufgrund ungültiger Konfigurationsmarkierungen nicht gestartet wird. – xtreampb

+0

@xtreampb Ich habe meinen Code aktualisiert. Ich denke, es hat die Einstellung in app.config erstellt und führt nach diesem Code, aber es gibt den gleichen Fehler beim Versuch, eine Zeichenfolge der Einstellung hinzuzufügen. –

+0

Ich denke, der Fehler wird ausgelöst, weil 'Settings.Default [customText]' nicht in die Einstellungsklasse kompiliert wird. Erweitern Sie in Ihrem Lösungsexplorer "properties/settings.settings/settings.designer.cs" und Sie sehen alle darin enthaltenen Elemente in der Standardinstanz.Wenn Sie die Einstellung hinzufügen, müssen Sie vor dem Aufruf möglicherweise Ihre Einstellungsdatei speichern und dann neu laden. – xtreampb

Antwort

0

Original-Antwort zu tun:

ich nicht versucht haben, eine neue Einstellung zu der Datei hinzufügen, aber ich habe musste Aktualisiere es. Hier ist ein Code, mit dem ich die gespeicherten Änderungen in der Datei speichern und abrufen kann. Ich weiß, dass es die Frage nicht direkt beantwortet, sondern Sie in die richtige Richtung weisen sollte, welche Klassen Sie betrachten und verwenden sollten.

Ich werde versuchen, zu aktualisieren, um diese Frage direkt zu beantworten, sobald ich etwas Atem bekommen habe.

public static void UpdateConfig(string setting, string value, bool isUserSetting = false) 
    { 
     var assemblyPath = AppDomain.CurrentDomain.BaseDirectory; 
     var assemblyName = "AssemblyName"; 

     //need to modify the configuration file, launch the server with those settings. 
     var config = 
      ConfigurationManager.OpenExeConfiguration(string.Format("{0}\\{1}.exe", assemblyPath, "AssemblyName")); 

     //config.AppSettings.Settings["Setting"].Value = "false"; 
     var getSection = config.GetSection("applicationSettings"); 
     Console.WriteLine(getSection); 

     var settingsGroup = isUserSetting 
      ? config.SectionGroups["userSettings"] 
      : config.SectionGroups["applicationSettings"]; 
     var settings = 
      settingsGroup.Sections[string.Format("{0}.Properties.Settings", assemblyName)] as ClientSettingsSection; 
     var settingsElement = settings.Settings.Get(setting); 

     settings.Settings.Remove(settingsElement); 
     settingsElement.Value.ValueXml.InnerText = value; 
     settings.Settings.Add(settingsElement); 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

Herausgegeben Antwort:

habe ich eine schnelle Google-Suche und fand eine akzeptierte Antwort auf dem MSDN-Forum. MSDN question. Sie müssen die Eigenschaft save aufrufen, damit das Add wirksam wird. Denken Sie an eine Datenbanktransaktion, bis Sie Commit aufrufen, sie wird jedoch nicht wirksam.

So was scheint in Ihrem Code zu fehlen ist: Properties.Settings.Default.Save(); indem es die nächste Zeile soll nach dem Settings.Default.Properties.Add(propertyCustom);

+0

Ich habe versucht, die Properties.Settings.Default.Save(); hinzuzufügen, aber der Fehler tritt immer noch auf, wenn versucht wird, der Einstellung eine Zeichenfolge hinzuzufügen. Ich denke, der Einstellungsname wurde erstellt, aber ich kann ihn nicht hinzufügen. Ich habe meine Frage aktualisiert, um klarer zu sein. –

Verwandte Themen