日期:2014-05-18  浏览次数:21208 次

如何保存控件的所有属性?
控件是动态创建的,应用在第三方平台上
可以对控件的属性(比如name size等等诸多属性做更改)
希望有保存的功能,把控件的属性,大小,位置等等属性都记录下来(比如xml文件)
之后第二次打开的时候,可以读取之前的属性值来赋值。

大家能帮点忙想想办法么,我考虑了几天没有什么好的办法,总不能一个空间几百个属性都列出来吧。况且还不止一个控件

------解决方案--------------------
还真没想过这个问题饿,先帮顶,在自己想一下
------解决方案--------------------
循环读出来,再存.
------解决方案--------------------
xml序列化
------解决方案--------------------
加一个自定义ATTRIBUTE用于区分需要保存的属性和不需要保存的属性

然后再反射拿数据放到字典中
Control yourControl;

var yourPropertyNeedToSave=yourControl.GetType().GetProperties().FindAll(p=>{ return p.GetCustomerAttribute(typeof(YourDefinedAttribute)).Length>0;});

Dictionary<string,object> data=new Dictionary<string,object>(yourPropertyNeedToSave.Count);
yourPropertyNeedToSave.ForEach(p=>{
data.Add(p.Name,p.GetValue(yourControl,null));
});
//data saving...


------解决方案--------------------
把控件list序列化保存, 使用的时候反序列化取出控件list,赋给当前控件。
你看看行不行。
------解决方案--------------------
是否可以考虑先保存当前页面的ViewState,重新加载的时候读取
------解决方案--------------------
序列化
------解决方案--------------------

XML 存储吧

这样的 情况下
------解决方案--------------------
xml序列化
------解决方案--------------------
XML 存储
------解决方案--------------------
WinForm 的控件 确实不能用基本的序列化:

方案有两个:
1. 用 Dx 控件,Dx控件支持 序列化和反序列化保存;

2. 递归所有控件,存入集合:用反射,穷举所有控件 的所有属性, 可以 Get 且可以 Set 的属性,就保存下来;
程序启动时,将 控件状态属性读取到字典中: 在窗体的 “控件添加事件” 中,搜索控件 e 的对应序列化 配置,遍历所有属性,反射赋值....(且新添加的控件,绑定同一个“控件添加事件”)


------解决方案--------------------
不要图方便,反射或许可以可以是一个trick,
但根据逻辑层次来说,你需要一个WindowInfo来维持数据和UI间的同步过程,并且负责持久化
------解决方案--------------------
属性那么多, 其实真正需要保存的很少.

微软发布过一个例子, 是关于设计时结构的,
里头有将一个窗口或控件, 及其内部控件(组件) 序列化为 xml 的,
还有使用 xml 创建出实例来的过程.

文章名:
Create And Host Custom Designers With The .NET Framework 2.0