Question

J'ai un "fichier de paramètres". Dans mon application Winforms appelée Settings.settings avec une classe partielle pour les méthodes personnalisées, etc. Est-il possible de charger / enregistrer des paramètres dynamiques basés sur des clés arbitraires?

Par exemple, il y a des ListViews dans mon application dans lesquels je veux enregistrer / charger les largeurs de colonne; Au lieu de créer un paramètre de largeur pour chaque colonne pour chaque vue de liste, j'aimerais une méthode simple pour charger / enregistrer les largeurs automatiquement.

Vous trouverez ci-dessous un exemple de la sauvegarde que j'ai essayée:

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;
        }
    }
}

Lors de l'exécution de ce code, l'erreur "La propriété de paramètres" TestsListView-0 "n'a pas été trouvée." : Quelque chose me manque-t-il?

Était-ce utile?

La solution

Stockez vos paramètres de largeur de colonne dans un objet Xml Serializable. C'est-à-dire quelque chose qui implémente IXmlSerializable , puis créez un seul paramètre de ce type dans Settings.settings.

Une bonne option serait probablement un dictionnaire sérialisable XML. Une recherche Google a rapidement trouvé plusieurs articles de blog différents qui décrivez comment mettre en œuvre cela.

Comme mentionné dans d'autres réponses, vous devez vous assurer que cet objet est un paramètre utilisateur. Vous devrez peut-être également initialiser l'instance de réglage. En d'autres termes, créez une instance XmlSerializableDictionary () et affectez-la au paramètre si celui-ci est null. Le sous-système de paramètres ne crée pas d'instances par défaut d'objets de paramètres complexes.

De plus, si vous souhaitez que ces paramètres soient conservés d'une version à l'autre de l'assemblage (c'est-à-dire qu'ils puissent être mis à niveau), vous devrez les mettre à niveau au démarrage de l'application. Ceci est décrit en détail dans de Miha Markic blog et blog de Raghavendra Prabhu.

Autres conseils

Je pense que l'erreur

  

La propriété settings   "clé" introuvable.

se produit parce que la valeur 'clé' n'existe pas dans votre fichier de paramètres (cela se passe d'explication).

Autant que je sache, vous ne pouvez pas ajouter de valeurs de paramètres par programme. Vous devrez peut-être envisager d'ajouter tous les paramètres dont vous avez besoin au fichier, même si une fois qu'ils sont là, je pense que vous pourrez d'utiliser le type de code que vous avez donné pour enregistrer les modifications.

Pour enregistrer les modifications, vous devez vous assurer que ce sont les paramètres "Utilisateur" et non "Application".

Le fichier de configuration est un fichier XML assez simple, vous pouvez donc peut-être attaquer le problème en écrivant le code XML directement dans le fichier, mais je ne l'ai jamais fait. Je ne peux donc pas être sûr que cela fonctionnerait, ni le recommanderais nécessairement. cette approche.

http://msdn.microsoft.com/en-us/library /cftf714c.aspx est le lien MSDN pour commencer.

Vous pouvez utiliser Settings.Save () ou similaire pour les paramètres utilisateur, mais notez que ces paramètres ne seront PAS conservés dans le fichier xxx.exe.config de votre répertoire app comme vous le souhaiteriez. En fait, ils vont quelque part au fond du dossier de l’utilisateur (recherchez dans votre lecteur xxx.exe.config pour le trouver). La prochaine fois que vous modifierez manuellement xxx.exe.config dans votre répertoire d'applications, la modification ne s'appliquera mystérieusement pas (le système utilise toujours celui qui a été enregistré dans le répertoire utilisateur).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top