2010-08-04 3 views
1

Для получения дополнительных классов, основанных на базовом классе I decided, необходимо иметь базовый UserControl и производные для каждого производного класса (для визуализации; поле справа от изображения).Обобщенные настройки UI + классы настроек

Теперь каждый из полученных UserControls имеет определенные настройки (красный прямоугольник слева). Пользовательский интерфейс настроек - это отдельный UserControl (можно перемещать свободно, помещать в отдельный диалог, если он слишком большой ...) и имеет базовый класс данных который он меняет (экземпляр этого класса является членом основного UserControl).

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

Это подводит меня к созданию отдельного класса холдинга (и, возможно, спасая) данные настройки, отдельное UserControl установить значение и подключить его вручную все вместе.
Это не первый раз, когда я сталкиваюсь с подобной проблемой, поэтому я начал думать о каком-то интерфейсе класса +, позволяющем легко создавать классы хранения данных и создавать пользовательские элементы управления. Моя идея что-то вроде

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

Класс настроек был бы списком этих элементов. Для каждого типа будет одно значение UserControl (checkbox/textbox/numericfield + description). A foreach цикл будет создавать конечный UserControl (одно значение UCs один под друг друга).

С одной стороны, мне нравится эта идея как интригующая задача и возможное облегчение скучного, повторяющегося и трудоемкого размещения меньших квадратов в более крупные и выравнивания их. С другой стороны, мне кажется, что я убиваю муху дробовиком.

Есть ли какое-то стандартное/готовое решение для этого? Любой лучший способ сделать это? Или это слишком сложное решение проблемы? Я буду рад видеть любые ответы, предложения, замечания ...

ответ

0

Прежде всего, посмотрите на this темы, это может открыть для вас интересные вещи.

Во всяком случае, на ваш вопрос, вы можете использовать сериализацию для этой цели, если по каким-то причинам вы не хотите использовать функцию .settings файла снабженное VS, вот как конвертировать и unconvert ваших деталей 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 
} 

После того, как вы получите XML просто хранить в папке ApplicationData или где-нибудь еще вы хотели бы.

Смежные вопросы