首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么保存控件的所有属性

2012-03-13 
如何保存控件的所有属性?控件是动态创建的,应用在第三方平台上可以对控件的属性(比如name size等等诸多属

如何保存控件的所有属性?
控件是动态创建的,应用在第三方平台上
可以对控件的属性(比如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

热点排行