2010-02-20 3 views
2

Je travaille sur un petit programme et j'aimerais enregistrer certains états et propriétés de contrôle dans un fichier de configuration. Cependant, je ne veux pas utiliser le fichier de paramètres "traditionnel" pour plusieurs raisons, mais plutôt le sérialiser ou simplement l'enregistrer dans un fichier spécifique. Par exemple obtenir TextBox1.Text de window1 et sérialiser, de sorte que lorsque je démarre l'application, je peux réutiliser l'ancienne valeur. Idem pour certaines cases à cocher par exemple.Sérialiser/Enregistrer la propriété de contrôle (ex: TextBox.Text) dans un fichier de configuration personnalisé

Comment cela peut-il être fait? Ce n'est pas un projet de "travail scolaire", puisque j'apprends de C# à partir de zéro dans mon temps libre. J'ai recherché plusieurs méthodes, mais elles sont simplement trop compliquées en utilisant une classe de sérialisation personnalisée, spécifiquement pour ce purpouse, ou en utilisant les paramètres du fichier .settings standard dans Visual Studio. En outre, je travaille en C# et le programme utilise WPF et non MFC.

Répondre

2

Nous avons déjà abordé cette question en parcourant l'arborescence visuelle et en enregistrant chaque élément dans un fichier XML. La disposition XML refléterait l'arborescence visuelle. Lors du rechargement de l'arborescence, vous pouvez parcourir le fichier XML pour charger les valeurs par défaut.

private void ForEachControlRecursive(object root, Action<Control> action, bool IsRead) 
    { 
     Control control = root as Control; 
     //if (control != null) 
     // action(control); 

     // Process control 
     ProcessControl(control, IsRead); 

     // Check child controls 
     if (root is DependencyObject && CanWeCheckChildControls(control)) 
      foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)root)) 
       ForEachControlRecursive(child, action, IsRead); 
    } 

ProcessControl comporte essentiellement un commutateur pour chaque type de commande, le routage à une fonction mesure pour le contrôle donné.

Par exemple:

private void ProcessControl(TextBox textbox, bool IsRead) 
    { 
     //1. textbox.Name; - Control name 
     //2. Text     - Control property 
     //3. textbox.Text - Control value 
     if (IsRead) 
     { 
            // Class that reads the XML file saving the state of the visual elements 
      textbox.Text = LogicStatePreserver.GetValue(textbox).ToString(); 
     } 
     else 
     { 
      LogicStatePreserver.UpdateControlValue(textbox, textbox.Text); 
     } 
    } 
+0

merci! Je vais l'essayer le matin et je vous le ferai savoir. – lorddarq

+0

en utilisant cette méthode, je devrais essentiellement passer par ce processus décrit ci-dessus pour chaque contrôle ou voulez-vous dire que je devrais définir une classe tout-purpouse pour cela? – lorddarq

+0

Je pense que je vais utiliser une forme de manipulation XML après tout. la méthode décrite ci-dessus est un peu compliquée, la méthode des paramètres ne fonctionne que si vous utilisez le DOM XML pour manipuler le fichier .config qui se trouve dans le dossier de l'application et la méthode ini est juste vieux. – lorddarq

Questions connexes