如何获取控件属性然后将它们保存到XML并加载回来?

时间:2009-11-29 15:55:40

标签: c# .net xml winforms reflection

实际上我需要4种方法。我正在使用c#.NET 3.5和Windows窗体。

  1. 从名称与列表名称匹配的当前表单获取所有控件属性(也包括MenuItems等子属性)//不能正常运行
  2. 将结果保存为XML //不知道如何保存结果
  3. 从XML和
  4. 加载结果
  5. 最后从XML设置加载的控件属性。 //工作很棒
  6. 现在我正在执行此表单第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;
      }
    

    致电metod:

         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 个答案:

答案 0 :(得分:3)

您是否意识到使用Windows窗体时,您可以使用现有的设置基础结构来保存控件和表单的设置?从设计器中选择一个控件,然后在“应用程序设置”下的属性中,然后选择“属性绑定”,可以将控件上的任何属性绑定到将生成的属性,以访问并保存该属性值。设置可以是应用程序或用户范围。这些设置还将使用独立存储,允许您升级到不同版本的设置以维护版本之间的用户设置以及许多其他功能。因此,这可能无法直接回答您的问题,但对您的特定问题可能是更好的解决方案。绑定属性后,您可以在每个用户或每个应用程序的基础上随时保存更改,如下所示:

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