我想知道如何能使我在构造函数里添加的选项不会在Form里又再次被添加
26 个解决方案
#1
还是把你的Code贴出来看看吧。
不过我猜想你的构造函数一定是这么写的:
public ClassName() : base()
{
this.Item.Add(...);
}
这样在你每次修改后都会添加项了。
不过我猜想你的构造函数一定是这么写的:
public ClassName() : base()
{
this.Item.Add(...);
}
这样在你每次修改后都会添加项了。
#2
是这样写的,那应该怎么写呢,谢谢了
#3
up
#4
up,学习
#5
帮顶了。。
#6
up
#7
重载构造函数,那么不调用添加项的构造函数来定义控件就不会多添加了.
#8
楼上正解~不说了
#9
不明白....郁闷...
#10
可以用静态构造函数添加。不过你这两项是不是所有该控件全部有的呀,如果是就没问题
#11
mark
#12
尝试重写OnInit方法,在里面加入项。
#13
不清楚为什么会有这样的需求,其实把这个操作放到一个方法中去就肯定不会出问题了。1.1里面也通过判断HttpContext.Current是否为空,2.0里面判断DesignMode属性都能知道是不是在设计期,在设计期跳过这些代码也是一个办法……
#14
楼上的,DesignMode 这个属性完全无效。。。
我放到构造函数的目的是为了在其他地方直接从ToolBox里拉出来放到界面上就可以了,不用再写任何代码了。
我放到构造函数的目的是为了在其他地方直接从ToolBox里拉出来放到界面上就可以了,不用再写任何代码了。
#15
楼上的,DesignMode 这个属性完全无效。。。
别告诉我你在构造函数里面判断……自己想一下这个属性被赋值的时机。
别告诉我你在构造函数里面判断……自己想一下这个属性被赋值的时机。
#16
如果你是这种需求,可以尝试用ToolboxDataAttribute看看能不能解决问题。
#17
up budong
#18
lvony。。我的不是asp的
#19
不懂,帮顶
#20
与ASP有什么关系?
在构造函数里面,对象还没构造好,谁能给一个属性赋值,所以DesignMode属性只能在OnInit等方法内使用。
ToolboxDataAttribute可以控制你的控件拖到设计器上自动生成的代码。
在构造函数里面,对象还没构造好,谁能给一个属性赋值,所以DesignMode属性只能在OnInit等方法内使用。
ToolboxDataAttribute可以控制你的控件拖到设计器上自动生成的代码。
#21
帮顶
#22
其实原因是这样的,微软的Designer在构造ComboBox时会判断当前的Items是否为默认值,通常可以使用DefaultValue或者ShouldSerrilizeItems来得到这个状态。另外,在ComboBox的ObjectCollection里面还有一些其他操作,也会影响IDE生成代码。
回到楼主的问题,当楼主在构造函数里添加了几项到Items里之后,默认情况下,IDE会自己在生成Code时把现有Items里的项再加一遍,而构造函数还是会被执行,这样Items里就出现了两遍所添加的项了。
处理办法有:
1、修改Items的DefaultValue或者重写ShouldSerrilizeItems方法,让他们在有你添加的项时返回Flase。
2、如果上面的还不能达到结果,建议重写Items属性和ObjectCollection类,这样就可以完全自己控制代码生成了。
回到楼主的问题,当楼主在构造函数里添加了几项到Items里之后,默认情况下,IDE会自己在生成Code时把现有Items里的项再加一遍,而构造函数还是会被执行,这样Items里就出现了两遍所添加的项了。
处理办法有:
1、修改Items的DefaultValue或者重写ShouldSerrilizeItems方法,让他们在有你添加的项时返回Flase。
2、如果上面的还不能达到结果,建议重写Items属性和ObjectCollection类,这样就可以完全自己控制代码生成了。
#23
帮顶
#24
感觉是因为每次刷新造成的,考虑不让这个地方刷新或者在Page_load中,对这段代码放在Page.IsPostedBack等于false中,那样只有在初始化该页面时才加载自定义控件,而在刷新或者IE返回等不加载该控件。
#25
顶
#26
问题算是解决了
用ShouldSerrilizeItems这个属性解决的,不过有个后遗症。。。不能通过设计器修改那个被重载的属性了
结贴了
用ShouldSerrilizeItems这个属性解决的,不过有个后遗症。。。不能通过设计器修改那个被重载的属性了
结贴了
#1
还是把你的Code贴出来看看吧。
不过我猜想你的构造函数一定是这么写的:
public ClassName() : base()
{
this.Item.Add(...);
}
这样在你每次修改后都会添加项了。
不过我猜想你的构造函数一定是这么写的:
public ClassName() : base()
{
this.Item.Add(...);
}
这样在你每次修改后都会添加项了。
#2
是这样写的,那应该怎么写呢,谢谢了
#3
up
#4
up,学习
#5
帮顶了。。
#6
up
#7
重载构造函数,那么不调用添加项的构造函数来定义控件就不会多添加了.
#8
楼上正解~不说了
#9
不明白....郁闷...
#10
可以用静态构造函数添加。不过你这两项是不是所有该控件全部有的呀,如果是就没问题
#11
mark
#12
尝试重写OnInit方法,在里面加入项。
#13
不清楚为什么会有这样的需求,其实把这个操作放到一个方法中去就肯定不会出问题了。1.1里面也通过判断HttpContext.Current是否为空,2.0里面判断DesignMode属性都能知道是不是在设计期,在设计期跳过这些代码也是一个办法……
#14
楼上的,DesignMode 这个属性完全无效。。。
我放到构造函数的目的是为了在其他地方直接从ToolBox里拉出来放到界面上就可以了,不用再写任何代码了。
我放到构造函数的目的是为了在其他地方直接从ToolBox里拉出来放到界面上就可以了,不用再写任何代码了。
#15
楼上的,DesignMode 这个属性完全无效。。。
别告诉我你在构造函数里面判断……自己想一下这个属性被赋值的时机。
别告诉我你在构造函数里面判断……自己想一下这个属性被赋值的时机。
#16
如果你是这种需求,可以尝试用ToolboxDataAttribute看看能不能解决问题。
#17
up budong
#18
lvony。。我的不是asp的
#19
不懂,帮顶
#20
与ASP有什么关系?
在构造函数里面,对象还没构造好,谁能给一个属性赋值,所以DesignMode属性只能在OnInit等方法内使用。
ToolboxDataAttribute可以控制你的控件拖到设计器上自动生成的代码。
在构造函数里面,对象还没构造好,谁能给一个属性赋值,所以DesignMode属性只能在OnInit等方法内使用。
ToolboxDataAttribute可以控制你的控件拖到设计器上自动生成的代码。
#21
帮顶
#22
其实原因是这样的,微软的Designer在构造ComboBox时会判断当前的Items是否为默认值,通常可以使用DefaultValue或者ShouldSerrilizeItems来得到这个状态。另外,在ComboBox的ObjectCollection里面还有一些其他操作,也会影响IDE生成代码。
回到楼主的问题,当楼主在构造函数里添加了几项到Items里之后,默认情况下,IDE会自己在生成Code时把现有Items里的项再加一遍,而构造函数还是会被执行,这样Items里就出现了两遍所添加的项了。
处理办法有:
1、修改Items的DefaultValue或者重写ShouldSerrilizeItems方法,让他们在有你添加的项时返回Flase。
2、如果上面的还不能达到结果,建议重写Items属性和ObjectCollection类,这样就可以完全自己控制代码生成了。
回到楼主的问题,当楼主在构造函数里添加了几项到Items里之后,默认情况下,IDE会自己在生成Code时把现有Items里的项再加一遍,而构造函数还是会被执行,这样Items里就出现了两遍所添加的项了。
处理办法有:
1、修改Items的DefaultValue或者重写ShouldSerrilizeItems方法,让他们在有你添加的项时返回Flase。
2、如果上面的还不能达到结果,建议重写Items属性和ObjectCollection类,这样就可以完全自己控制代码生成了。
#23
帮顶
#24
感觉是因为每次刷新造成的,考虑不让这个地方刷新或者在Page_load中,对这段代码放在Page.IsPostedBack等于false中,那样只有在初始化该页面时才加载自定义控件,而在刷新或者IE返回等不加载该控件。
#25
顶
#26
问题算是解决了
用ShouldSerrilizeItems这个属性解决的,不过有个后遗症。。。不能通过设计器修改那个被重载的属性了
结贴了
用ShouldSerrilizeItems这个属性解决的,不过有个后遗症。。。不能通过设计器修改那个被重载的属性了
结贴了