CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  .NET Framework

自定义控件的问题~帮顶有分!

楼主xiyun(Cancer)2006-06-04 11:56:35 在 .NET技术 / .NET Framework 提问

我从一个控件派生了一个自定义控件,在构造函数里添加了一些代码:比如说我继承的是ComboBox,我在派生的类的构造函数里对ComboBox添加了2项选项,然后我将这个自定义控件放到Form上后,在form的构造函数里又自动的添加了这2个选项,并且,我只要在设计器里每对这个控件作出改动,就会自动的又添加2个选项。。。  
  我想知道如何能使我在构造函数里添加的选项不会在Form里又再次被添加 问题点数:100、回复次数:26Top

1 楼lalac(水月流影)回复于 2006-06-04 14:26:47 得分 0

还是把你的Code贴出来看看吧。  
   
  不过我猜想你的构造函数一定是这么写的:  
  public   ClassName()   :   base()  
  {  
      this.Item.Add(...);  
  }  
   
  这样在你每次修改后都会添加项了。Top

2 楼xiyun(Cancer)回复于 2006-06-04 21:17:29 得分 0

是这样写的,那应该怎么写呢,谢谢了Top

3 楼amandag(高歌)回复于 2006-06-04 21:18:38 得分 1

upTop

4 楼fire_qu(金迷之蓝色忧郁)回复于 2006-06-05 09:50:17 得分 1

up,学习Top

5 楼elivehai(一切皆有可能)回复于 2006-06-05 10:22:48 得分 1

帮顶了。。  
  Top

6 楼KylinChina()回复于 2006-06-05 10:34:58 得分 1

upTop

7 楼yuwenge(活得痛快)回复于 2006-06-05 21:38:29 得分 1

重载构造函数,那么不调用添加项的构造函数来定义控件就不会多添加了.Top

8 楼VirtualDesktop(^_^)回复于 2006-06-05 22:04:22 得分 1

楼上正解~不说了Top

9 楼liminlovemama( 大森林)回复于 2006-06-05 22:07:18 得分 1

不明白....郁闷...Top

10 楼BlueDog(身正方能顶天立地,心和才可容士纳物。)回复于 2006-06-05 23:19:25 得分 1

可以用静态构造函数添加。不过你这两项是不是所有该控件全部有的呀,如果是就没问题Top

11 楼ilovejolly(有些伤感)回复于 2006-06-06 10:51:55 得分 1

markTop

12 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-06-06 10:57:00 得分 5

尝试重写OnInit方法,在里面加入项。Top

13 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-06-06 11:01:41 得分 5

不清楚为什么会有这样的需求,其实把这个操作放到一个方法中去就肯定不会出问题了。1.1里面也通过判断HttpContext.Current是否为空,2.0里面判断DesignMode属性都能知道是不是在设计期,在设计期跳过这些代码也是一个办法……Top

14 楼xiyun(Cancer)回复于 2006-06-06 14:52:02 得分 0

楼上的,DesignMode   这个属性完全无效。。。  
  我放到构造函数的目的是为了在其他地方直接从ToolBox里拉出来放到界面上就可以了,不用再写任何代码了。Top

15 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-06-06 15:06:46 得分 5

楼上的,DesignMode   这个属性完全无效。。。  
   
   
  别告诉我你在构造函数里面判断……自己想一下这个属性被赋值的时机。Top

16 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-06-06 15:12:06 得分 5

如果你是这种需求,可以尝试用ToolboxDataAttribute看看能不能解决问题。Top

17 楼tdtdtdtdtd123(飘)回复于 2006-06-07 09:59:50 得分 1

up   budongTop

18 楼xiyun(Cancer)回复于 2006-06-09 10:35:33 得分 0

lvony。。我的不是asp的Top

19 楼amandag(高歌)回复于 2006-06-09 10:38:47 得分 1

不懂,帮顶Top

20 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-06-09 10:41:29 得分 5

与ASP有什么关系?  
   
  在构造函数里面,对象还没构造好,谁能给一个属性赋值,所以DesignMode属性只能在OnInit等方法内使用。  
   
  ToolboxDataAttribute可以控制你的控件拖到设计器上自动生成的代码。Top

21 楼skyline81()回复于 2006-06-09 16:44:46 得分 1

帮顶Top

22 楼lalac(水月流影)回复于 2006-06-10 14:54:37 得分 60

其实原因是这样的,微软的Designer在构造ComboBox时会判断当前的Items是否为默认值,通常可以使用DefaultValue或者ShouldSerrilizeItems来得到这个状态。另外,在ComboBox的ObjectCollection里面还有一些其他操作,也会影响IDE生成代码。  
   
  回到楼主的问题,当楼主在构造函数里添加了几项到Items里之后,默认情况下,IDE会自己在生成Code时把现有Items里的项再加一遍,而构造函数还是会被执行,这样Items里就出现了两遍所添加的项了。  
   
  处理办法有:  
  1、修改Items的DefaultValue或者重写ShouldSerrilizeItems方法,让他们在有你添加的项时返回Flase。  
  2、如果上面的还不能达到结果,建议重写Items属性和ObjectCollection类,这样就可以完全自己控制代码生成了。Top

23 楼tdtdtdtdtd123(飘)回复于 2006-06-11 16:48:44 得分 1

帮顶  
  Top

24 楼allismine()回复于 2006-06-13 20:45:31 得分 1

感觉是因为每次刷新造成的,考虑不让这个地方刷新或者在Page_load中,对这段代码放在Page.IsPostedBack等于false中,那样只有在初始化该页面时才加载自定义控件,而在刷新或者IE返回等不加载该控件。Top

25 楼mhxcy()回复于 2006-06-14 08:33:39 得分 1

顶Top

26 楼xiyun(Cancer)回复于 2006-06-17 13:58:00 得分 0

问题算是解决了  
  用ShouldSerrilizeItems这个属性解决的,不过有个后遗症。。。不能通过设计器修改那个被重载的属性了  
   
  结贴了Top

相关问题

关键词

得分解答快速导航

  • 帖主:xiyun
  • amandag
  • fire_qu
  • elivehai
  • KylinChina
  • yuwenge
  • VirtualDesktop
  • liminlovemama
  • BlueDog
  • ilovejolly
  • Ivony
  • Ivony
  • Ivony
  • Ivony
  • tdtdtdtdtd123
  • amandag
  • Ivony
  • skyline81
  • lalac
  • tdtdtdtdtd123
  • allismine
  • mhxcy

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo