Обобщенные настройки интерфейса + настройки классов - PullRequest
1 голос
/ 04 августа 2010

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

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

альтернативный текст http://a.imageshack.us/img651/2710/46937664.png

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

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

Класс настроек будет Список этих элементов. Для каждого типа будет одно значение UserControl (флажок / текстовое поле / числовое поле + описание). Цикл foreach создает конечный элемент UserControl (одно значение UC одно под другим).

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

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

1 Ответ

0 голосов
/ 16 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...