2009-11-20 8 views
1

quelqu'un pourrait-il me dire pourquoi je ne peux pas enregistrer des données dynamiques dans Settings.Default.Context?Comment enregistrer les paramètres de contexte par défaut dans C#?

Mon code:

Settings.Default.Context.Add("myKey", "myValue"); 
Settings.Default.Save(); 

MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- This works 

Si je ne rechargent pas le tout APPI fonctionne très bien. Mais après l'application de rechargement et d'appeler uniquement

MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- error on appi reload 

je reçois une erreur comme Object reference not set to an instance of an object.. Pourquoi je ne peux pas sauver le contexte? Quel est le problème?

J'utilise cette façon de sauver parce que je suis en mesure d'ajouter dynamiquement de nouvelles clés et valeurs.

Répondre

1

Je ne pense pas que vous pouvez ajouter de nouveaux paramètres de cette façon, ils sont en lecture seule car ils sont des ressources du programme lui-même.

Ce que vous pouvez faire pour le faire est un System.Collections.Specialized.StringCollection, puis ajouter des éléments. Ces éléments supplémentaires seront toujours là après la fermeture de l'application.

Mais vous ne pouvez pas créer un paramètre complètement nouveau et l'avoir toujours là.

0

uhm quel est le type de paramètres? Quoi qu'il en soit je pense que vous avez manqué .Context ..try écrire:

Settings.Default.Context["myKey"].ToString() 

Le problème est que la valeur est un réglage de l'utilisateur Portée et ne persiste que pendant toute la durée de la session d'application. Je pense que vous avez besoin de paramètres d'application qui peuvent uniquement être modifiés au moment du design (dans l'onglet Propriétés du projet -> Paramètres) ou en modifiant le fichier .exe.config entre les sessions d'application (http://msdn.microsoft.com/en-us/library/bb397744.aspx)

Vous devez faire quelque chose comme ceci:

using System.Configuration; 

namespace WindowsFormsApplication1 
{ 
    class MySettings : ApplicationSettingsBase 
    { 
    [UserScopedSetting] 
    public string SavedString 
    { 
     get { return (string)this["SavedString"]; } 
     set { this["SavedString"] = value; } 
    } 
    } 

    public partial class Form1 : Form 
    { 
    MySettings m_Settings; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     m_Settings = new MySettings(); 

     Binding b = new Binding("Text", m_Settings, "SavedString", true, DataSourceUpdateMode.OnPropertyChanged); 
     this.DataBindings.Add(b); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     m_Settings.Save(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.Text = "My Text"; 
    } 
    } 
} 

cette application crée un formulaire sans légende et un bouton dans le centre. Une fois cliqué sur le bouton, le .Texte (donc la légende) change et il est sauvegardé lors de la fermeture du formulaire. Relancez l'application et vous aurez avec la nouvelle légende Mon texte :)

Si vous avez besoin du code source juste me dire :)

0

Vu dans le navigateur d'objet:

public override SettingsContext Contexte {get; }

Lecture seule?

+0

Ce n'est pas seulement en lecture seule. – Jooj