2010-08-04 5 views
1

Pour plus de classes dérivées d'une classe de base I decided pour avoir un UserControl de base et dérivés pour chaque classe dérivée (pour la visualisation, boîte sur le côté droit de l'image).Paramètres généralisés Classes de paramètres UI +

Maintenant, chacun des UserControls dérivés ont des paramètres spécifiques (rectangle rouge à gauche) Les paramètres UI est un UserControl séparé (peut être déplacé librement, mis en boîte de dialogue séparée si trop grand ...) et a une classe de données sous-jacente qui change (l'instance de cette classe est membre du UserControl principal).

alt text http://a.imageshack.us/img651/2710/46937664.png

Cela me amène à la création d'une tenue de classe distincte (et peut-être sauver) les données de réglage, UserControl séparés pour définir les valeurs et la connexion manuellement tous ensemble.
Ce n'est pas la première fois que je rencontre un problème similaire, j'ai donc commencé à penser à une interface classe + me permettant de créer facilement les classes de stockage de données et de générer les commandes utilisateur. Mon idée est quelque chose comme

class SettingsItem 
{ 
    string name; 
    TypeEnum type; 
    double value; //how about different types eg. bool? Inheritance? 
} 

La classe de paramètres serait une liste de ces éléments. Pour chaque type, il y aurait une seule valeur UserControl (checkbox/textbox/numericfield + description). Une boucle foreach créerait le UserControl final (une valeur UC un sous l'autre). D'un côté, j'aime cette idée comme un défi intrigant et un soulagement potentiel de l'ennui, répétitif et fastidieux en mettant de plus petits carrés dans les plus grands et en les alignant. D'un autre côté, cela me semble un peu comme tuer une mouche avec un fusil de chasse.

Existe-t-il une solution standard/prête à cela? Une meilleure façon de le faire? Ou est-ce simplement une solution trop complexe à un problème mineur? Je serai heureux de voir des réponses, des suggestions, des remarques ...

Répondre

0

Tout d'abord, jetez un oeil à this thread, il pourrait découvrir des choses intéressantes pour vous.

Quoi qu'il en soit, par votre question, vous pouvez utiliser sérialisation à cet effet, si pour une raison quelconque, vous ne voulez pas utiliser le .settings fonction de fichier fourni avec VS, voici comment vous convertir et unconvert vos articles XML:

class Program 
{ 
    static void Main(string[] args) 
    { 
    var setting = new SettingsItem 
    { 
     Name = "Setting1", 
     Type = SettingTypes.UserSetting, 
     Value = "setting" 
    }; 

    XmlSerializer serializer = new XmlSerializer(typeof(SettingsItem)); 
    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sr = new StringWriter(sb)) 
     serializer.Serialize(sr, setting); 

    var serialized = sb.ToString(); 

    Console.WriteLine(serialized); 

    SettingsItem item; 
    using (var r = new StringReader(sb.ToString())) 
     item = (SettingsItem)serializer.Deserialize(r); 

    Console.WriteLine("Name: {0}, Type: {1}, Value: {2}", 
     item.Name, 
     item.Type, 
     item.Value); 
    Console.ReadKey(); 
    } 
} 

[Serializable] 
public class SettingsItem 
{ 
    public string Name { get; set; } 
    public SettingTypes Type { get; set; } 
    public object Value { get; set; } 
} 

[Flags] 
public enum SettingTypes 
{ 
    ApplicationSetting = 1, 
    UserSetting = 2, 
    AdminOnly = 4, 
    Temporary = 8 
} 

Une fois que vous obtenez le XML simplement stocker dans le dossier ApplicationData ou ailleurs vous le souhaitez.