随笔-137  评论-1675  文章-1  trackbacks-63

   这篇,我将谈谈自己在开发自定义控件中的一些方法。

 

   现在.net集成性太强,好多东西都不用自己去写,这让C++的相当羡慕,哈哈,所以那些麻烦的事(自定义控件)程序员都不去自己做,但是会底层的原理还是比较有好处的。

 

   如果一个控件中有非常多的属性的话,你会选择全写在一个类中吗?

 

  一般的人都会说不,因为这样的代码一看就晕,不好管理.如果能够按控件的特性来分开写的话,应该会好很多,这样在程序员调用的时候也好设置相关的属性.

 

    前几篇文章我一直在做自定义分页控件.我们知道自定义分页控件如果做完善的话特别麻烦,理所当然的相应的属性也就特别多.所在根据我自己的实际情况,我把自己的分页控件分为三个类:

 

    分页控件中部分类图结构:

 

  

 

  1: CustomPagerSetting 分页控件相关设置

  2 :CustomPagerText 分页控件相关文本设置

  3:CustomInfoSectionSetting 分页控件自定义信息区设置

 

     如此多的属性如果是放在一个类中那是相当麻烦的.为此我们可以将它们分开形成内嵌属性.

 

Code

     
     如何形成内嵌属性我现在不想多说,此时的控件属性如果是在代码中动态设置的话,如果页面没有回发事件,都是正常的,

但是如果有回发所有的属性都要重新赋值,否则所有的属性值都会丢失.

 

     我们知道viewstate是不能保存复杂属性,就像上面的三个类,它只能保存简单属性,例如int,string等.

 

     刚开始的时候我在CustomPagerSetting为中修改,将里面的属性都用viewstate保存,但是编译通不过,提示不存在viewstate对象,但是在控件文件中是可以的,那是因为控件自己继承control类,类文件又不能继承control,所以我们需要自定义一个ViewState属性
 
Code

 

    自定义类型状态管理,那么我们就必须接触到IStateManager这个接口实现这个接口要实现三个方法:


Code

 

    这些MSN上都可查.这还不行,还要在控件类中实现自定义视图管理.


Code

    

    此时我们再试的时候,发现回发的时候,属性就不会丢失了。


Tag标签: C#,.NET
posted on 2008-04-17 17:30 姜敏 阅读(2151) 评论(22)  编辑 收藏 网摘 所属分类: 控件开发

评论:
#1楼 2008-04-17 17:57 | xingliu_sr[未注册用户]
  顶一下,不错啊,学习着.以后俺也来开发自己的控件.
  回复  引用    
#2楼[楼主] 2008-04-17 18:03 | 姜敏      
@xingliu_sr
谢谢你的支持,我们要温故而知新啊.

  回复  引用  查看    
#3楼 2008-04-17 21:07 | 王庆      
没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。
  回复  引用  查看    
#4楼[楼主] 2008-04-17 22:06 | 姜敏      
王庆
没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。

本人并不同意你的看法,其它的类是不能保存视图,如果只是在control类中当然可以,当类不能继承control类的时候,就不可以了。你可以自己试下啊。

  回复  引用  查看    
#5楼 2008-04-17 22:59 | whwqs[未注册用户]
学习
  回复  引用    
#6楼 2008-04-18 01:47 | 镜涛      
呵呵,最近刚写了个自定义分页控件,借鉴一下!
  回复  引用  查看    
#7楼 2008-04-18 08:31 | 李战      
http://www.cnblogs.com/Emoticons/qface/055243188.gif" alt="" />强烈支持!路过http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" />
  回复  引用  查看    
#8楼[楼主] 2008-04-18 08:54 | 姜敏      
@镜涛
@李战
谢谢支持,继续努力

  回复  引用  查看    
#9楼 2008-04-18 09:52 | 小瑞克      
自定义复杂的状态十分麻烦
  回复  引用  查看    
#10楼[楼主] 2008-04-18 10:00 | 姜敏      
#9楼 2008-04-18 09:52 小瑞克
自定义复杂的状态十分麻烦

哈哈,这是没办法的,知道怎么实现就行,还好这些代码微软都有示例,不用全部由自己实现

  回复  引用  查看    
#11楼 2008-04-18 10:49 | tiray      
关于自定义ViewState的那部分相当不错!
  回复  引用  查看    
#12楼 2008-04-18 12:46 | 王庆      
--引用--------------------------------------------------
姜敏: 王庆
没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。

本人并不同意你的看法,其它的类是不能保存视图,如果只是在control类中当然可以,当类不能继承control类的时候,就不可以了。你可以自己试下啊。
--------------------------------------------------------
呵呵,我的意思是,你在写分页控件的时候,直接从Control或WebControl继承,这两个类都对ViewState有相关的操作,你没有必要在重写一些类来管理ViewState。

  回复  引用  查看    
#13楼[楼主] 2008-04-18 13:22 | 姜敏      
@王庆
呵呵,我的意思是,你在写分页控件的时候,直接从Control或WebControl继承,这两个类都对ViewState有相关的操作,你没有必要在重写一些类来管理ViewState

你好像没有清楚我写这篇文章的意思,

如果一个控件中有非常多的属性的话,你会选择全写在一个类中吗?
一般的人都会说不,因为这样的代码一看就晕,不好管理.如果能够按控件的特性来分开写的话,应该会好很多,这样在程序员调用的时候也好设置相关的属性.

分页控件本身的确是具备VIEWSTATE方法,但是你控件中有其它的类,它并不能继承control,此时就要自己写了。一个自定义控件中并不会只有一个类文件。而且默认viewstate是不能保存实例类的


  回复  引用  查看    
#14楼 2008-04-18 16:43 | great wang      

强烈支持!支持LZ继续完善自定义分页控件的功能!学习了http://www.cnblogs.com/Emoticons/msn/shades_smile.gif" alt="" />


  回复  引用  查看    
#15楼 2008-04-18 16:47 | great wang      
LZ,什么时候能把你写的分页控件的完整代码打包 让我们分享学习一下!
  回复  引用  查看    
#16楼[楼主] 2008-04-18 16:49 | 姜敏      
@ great wang
这是4-16更新的源码,有什么问题可留言讨论
http://www.cnblogs.com/ASPNET2008/archive/2008/03/29/1128917.html" target="_new">http://www.cnblogs.com/ASPNET2008/archive/2008/03/29/1128917.html

  回复  引用  查看    
#17楼 2008-04-18 22:13 | 拼命郎      
其实保证自己的类能够序列化就够了,有这个好习惯不用这么麻烦!
  回复  引用  查看    
#18楼 2008-04-22 23:55 | huashen      
啥叫:这些MSN上都可查.

  回复  引用  查看    
#19楼 2008-06-14 16:05 | 王孟军!      
还不错
建议 你把 标题改成 自定义属性类型的 状态维护 更准确,你觉得呢?:)

  回复  引用  查看    
#20楼[楼主] 2008-06-15 22:15 | 姜敏      
@huashen
啥叫:这些MSN上都可查.
哈哈,不好意思写错了,本意是这些都可以从MSDN上查询。

  回复  引用  查看    
#21楼[楼主] 2008-06-15 22:16 | 姜敏      
@王孟军!
哈哈,谢谢指教.

  回复  引用  查看    
#22楼 2008-12-11 11:10 | owen1[未注册用户]
太棒了
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1158486




相关文章:

相关链接: