我开发一个应用程序,它的用户可以添加一些控件(按钮,标签和...)动态地到面板,然后保存与所有添加的控件的形式。为了节省,我使用XMLSerializer,但它给了我这个错误
无法序列化System.ComponentModel.ISite类型的成员System.ComponentModel.Component.Site,因为它是一个接口。
我想知道如何将控件保存在XML文件中?如果不可能,还有其他方法可以做到吗?
修改(适用的解决)
我找到了一个很好的项目,正是我想要的:
Easy Form Design at Run Time C# Windows Forms
谢谢
答案 0 :(得分:0)
控件具有数十个属性。当你创建一个控制,只是设置一些属性,其余保持默认。您只需要保存指定的属性。
创建一个类来存储所需的属性:
public class ControlValueObject
{
public string Type { get; set; }
public string Text { get; set; }
public int Top { get; set; }
public int Left { get; set; }
// Add the properties you need
}
然后,创建这些对象的集合和序列化:
var label = new Label { Text = "Sample", Top = 10, Left = 20 };
var button = new Button { Text = "Click", Top = 40, Left = 20 };
panel.Controls.Add(label);
panel.Controls.Add(button);
var controls = panel.Controls.OfType<Control>()
.Select(c => new ControlValueObject { Type = c.GetType().Name, Text = c.Text, Left = c.Left, Top = c.Top })
.ToList();
var ser = new XmlSerializer(controls.GetType());
ser.Serialize(stream, controls);
我想,您会猜到如何进行反序列化。