当前位置:编程学习 > C#/ASP.NET >>

userControl 序列化

如何将一个userControl进行序列化,我已将其设置为可序列化的,但不能成功。
如若不能序列化,有何办法将userControl存储在文件中,并可重新读取出来,再次用winForm显示 --------------------编程问答-------------------- 你所说的userControl是个什么? 实体吗?

代码贴出来啊! --------------------编程问答-------------------- 代码太多没有办法贴的
解决方案中有3个工程,分别为工程a,工程b,工程c;
工程a中设计了5个userControl,
工程b中给用户显示了一个winForm窗体,该窗体动态加载了工程a中的userControl,
当工程b执行某一操作后,将winForm窗体中的数据传给工程c,此时工程c将生成一个文件,
此文件需包含winForm窗体,并且下次打开文件的时候,将winForm以userControl显示出来,

PS:不要说将winForm中数据保存到文件,读取时,根据数据在制作userControl。
因为不在一个工程,这样耦合太高,且太麻烦 --------------------编程问答-------------------- 序列化是没办法把控件序列化的,你要序列化控件只能序列化他里面的属性,最后在反序列化之前先new一个userControl然后把属性赋给userControl,同时要注意属性里如果有color属性的话需要特殊处理,这个属性也是没办法直接序列化的,要先转成RGB格式保存 --------------------编程问答-------------------- 嗯,确实无法序列化控件,
后来感觉若是可以讲userControl转化为比特流,然后使用fs.write()方法也可以解决此问题。
但完全找不到userControl转到比特流的方法 --------------------编程问答-------------------- 二进制序列化,保存成文件,控件好像不行,你可以把他需要的属性或配置写成一个类序列化就好了,反序列化后根据这个配置重新生成控件实例 --------------------编程问答-------------------- 封装到 DLL 里面不就行了? --------------------编程问答--------------------
引用 5 楼 niss 的回复:
二进制序列化,保存成文件,控件好像不行,你可以把他需要的属性或配置写成一个类序列化就好了,反序列化后根据这个配置重新生成控件实例

因为不在一个工程,这样耦合太高,且太麻烦


引用 6 楼 luochanghua 的回复:
封装到 DLL 里面不就行了?

没太懂,能具体点不 --------------------编程问答-------------------- 设计思路很有问题。。 --------------------编程问答-------------------- UserControl本身是不能被序列化的。因为它的实现使用了操作系统的内核对象(比如窗口句柄等),而这些句柄不能被系列化。

你可以系列化UserControl的布局和数据,然后根据布局和数据重新构建UserControl。 --------------------编程问答--------------------
引用 8 楼 conmajia 的回复:
设计思路很有问题。。

也许工程b、工程c可以合入一个工程。但工程a必须单独,因为现在使用的是工程a,但将来可能会(必然)开发工程x,y,z。工程x,y,z中又会设计自己的userControl,使用工程x时,会将工程x中的userControl添加至工程b的winForm中 --------------------编程问答-------------------- 通过动态加载DLL来实现这个功能。提供一个思路吧。比如:工程B的form中有一块地方,比如是TabControl,都知道,这是可扩展的,就像你说的 X工程中的某个Control可以放到这个TabControl中作为一个新的tab页。那我就把这个tabcontrol定义为“容器”,把这个“容器”里的东西叫做“部件”。那么现在需要做的就是定义一个容器“tabControl1”并且给它一个不重复的标识,在工程X中定义这个userControl时只需要标明放到哪个容器中就可以了。(建议:如何标明请参考C#中的Attribute 通俗的讲就是类或者方法上面的[]里面的东东) --------------------编程问答--------------------
引用 9 楼 gomoku 的回复:
UserControl本身是不能被序列化的。因为它的实现使用了操作系统的内核对象(比如窗口句柄等),而这些句柄不能被系列化。

你可以系列化UserControl的布局和数据,然后根据布局和数据重新构建UserControl。

如何序列化UserControl的布局和数据?新建一个类有UserControl中的所有属性?如此的话字段也太多了 --------------------编程问答-------------------- 来学习下,开眼界了! --------------------编程问答-------------------- 建立解决方案 类库
在类库里写usercontrol
生成DLL
放到你的项目里 
就可以了 --------------------编程问答-------------------- 序列号usercontrol?搞毛啊?封装成dll就行了 --------------------编程问答-------------------- 把控件的属性保存。。到时候再读出来就是了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,