Как получить управляющие свойства, сохранить их в XML и загрузить обратно? - PullRequest
0 голосов
/ 29 ноября 2009

На самом деле мне нужно 4 метода. Я использую c # .NET 3.5 и формы Windows.

  1. Получить ВСЕ свойства элемента управления (также суб-свойства, такие как MenuItems и т. Д.) Из текущей формы, где имя соответствует имени списка // не работает нормально
  2. Сохранить результаты в XML // не знаю, как сохранить результаты
  3. Загрузить результат из XML и
  4. наконец установить загруженные свойства элемента управления из XML. // отлично работаю

Сейчас я делаю эту форму, шаг 1:

  public static Dictionary<string, object> xmlDictionary;
  public Control FindControlRecursive(Control container, List<string> properties)
  {
     foreach (Control controls in container.Controls)
     {
        Type controlType = controls.GetType();
        PropertyInfo[] propertyInfos = controlType.GetProperties();
        foreach (PropertyInfo controlProperty in propertyInfos)
        {
           foreach (string propertyName in properties)
           {
              if (controlProperty.Name == propertyName)
              {
                 xmlDictionary.Add(controlProperty.Name, controlProperty.GetValue(controls, null));
              }
           }
        }
        Control foundCtrl = FindControlRecursive(controls, properties);
        if (foundCtrl != null)
           return foundCtrl;

     }
     return null;
  }

Вызов метода:

     List<string> propertyNames = new List<string>(); //list of all property names I want to save

     propertyNames.Add("Name");
     propertyNames.Add("Text");
     propertyNames.Add("Size");

     FindControlRecursive(this, propertyNames); //this is the current form

Этот метод не возвращает все свойства элемента управления, и я не знаю, почему.

Шаг 4.:

//field = some new field
//newValue = new value
    FieldInfo controlField = form.GetType().GetField(field, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
    object control = controlField.GetValue(form);
    PropertyInfo property = control.GetType().GetProperty(newValue);
    property.SetValue(control, items.Value, new object[0]);

Шаг 4 отлично работает, но не знаю, как перебирать результаты XML.

Не могли бы вы помочь мне решить эти проблемы.

Спасибо и всего наилучшего.

1 Ответ

3 голосов
/ 29 ноября 2009

Известно ли вам, что в Windows Forms существует существующая инфраструктура настроек, которую вы можете использовать для сохранения настроек элементов управления и ваших форм? В конструкторе выберите элемент управления и в свойствах в разделе «Параметры приложения», затем «Привязка свойств» можно связать любое свойство в элементе управления со свойством, которое будет сгенерировано для доступа и сохранения значения этого свойства. Настройки могут быть приложением или пользователем. Эти настройки также будут использовать изолированное хранилище, позволяя вам обновлять настройки до различных версий, чтобы поддерживать пользовательские настройки между версиями, и многие другие функции. Так что это может не дать прямого ответа на ваш вопрос, но может быть лучшим решением для вашей конкретной проблемы. После того, как вы связали свойство, вы можете сохранять изменения, когда захотите, для каждого пользователя или для каждого приложения, например:

Settings.Default.TextBox1 = textBox2.Text; Settings.Default.BackColor = Color.Blue; Settings.Default.Save ();

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