2008-10-14 9 views
1

J'ai un "fichier de paramètres" dans mon application Winforms appelé Settings.settings avec une classe partielle pour les méthodes personnalisées, etc. Existe-t-il un moyen de charger/enregistrer des paramètres dynamiques basés sur des clés arbitraires? Par exemple, j'ai des ListViews dans mon application dans lesquelles je veux enregistrer/charger les largeurs de colonnes; Au lieu de créer un paramètre de largeur pour chaque colonne pour chaque vue de liste je voudrais une méthode simple pour charger/enregistrer les largeurs automatiquement.Winforms - Paramètres de chargement/enregistrement dynamiques

Ci-dessous un exemple de la sauver méthode que j'ai essayé:

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, je reçois l'erreur « La propriété des paramètres « TestsListView-0 » n'a pas été trouvé. » Y a-t-il quelque chose qui me manque?

Répondre

1

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

Une bonne option serait probablement un dictionnaire XML Serializable. Un rapide google search a trouvé un certain nombre de billets de blog différents qui décrivent comment implémenter cela.

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

De plus, si vous souhaitez que ces paramètres persistent entre les versions d'assemblage (c'est-à-dire que vous puissiez les mettre à niveau), vous devrez mettre à niveau les paramètres au démarrage de l'application. Ceci est décrit en détail sur le blog Miha Markič's et le blog Raghavendra Prabhu's.

0

Je pense que l'erreur

La propriété des paramètres 'clé' n'a pas été trouvé.

se produit parce que la valeur 'clé' n'existe pas dans votre fichier de paramètres (assez explicite). Pour autant que je sache, vous ne pouvez pas ajouter des valeurs de paramètres par programme, vous devrez peut-être étudier l'ajout de tous les paramètres dont vous avez besoin au fichier après tout, mais une fois qu'ils sont là, je pense que vous serez capable d'utiliser le type de code que vous avez donné pour enregistrer les modifications.

Pour enregistrer les modifications, vous devez vous assurer qu'elles correspondent aux paramètres 'Utilisateur' et non 'Application'. Le fichier de paramètres est un fichier XML assez simple. Vous pouvez donc attaquer le problème en écrivant directement le fichier XML dans le fichier, mais je ne l'ai jamais fait. Je ne suis donc pas sûr que cela fonctionnera, ou forcément recommande cette approche.

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

0

Vous pouvez faire Settings.Save() ou similaire sur les paramètres utilisateur, mais notez que ces paramètres ne seront pas conservés dans le fichier xxx.exe.config dans le répertoire de votre application comme vous le souhaitez. Ils vont réellement quelque part au fond du dossier utilisateur (recherchez votre lecteur xxx.exe.config pour le trouver). La prochaine fois que vous changerez manuellement xxx.exe.config dans votre répertoire d'application, la modification ne s'appliquera mystérieusement pas (le système utilise toujours celui qui est enregistré dans le répertoire de l'utilisateur).