问题描述
自定义了一些控件,首先有一个控件基类:publicabstractpartialclassBaseControl:UserControl{///<summary>///初始化控件基类。///</summary>publicBaseControl(){InitializeComponent();base.SetStyle(ControlStyles.UserPaint|ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer,true);base.BackColor=Color.Transparent;}///<summary>///隐藏控件背景色属性为只读属性。///</summary>publicnewColorBackColor{get{returnbase.BackColor;}}privateSystem.ComponentModel.IContainercomponents=null;protectedoverridevoidDispose(booldisposing){if(disposing&&components!=null){components.Dispose();}base.Dispose(disposing);}privatevoidInitializeComponent(){components=newSystem.ComponentModel.Container();base.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;base.Name="BaseControl";}}然后继续继承控件:pulicclassMyControl:BaseControl{publicMyControl(){//...}}控件里面还有一些属性,比如某个元素的显示颜色等等。然后我在窗体上拖放控件的时候,设计器自动给我写的所有属性重新赋值了一遍,我都初始化好了,根本不用在设计器里面赋值啊,而且BackColor隐藏为只读的,设计器还是要给它赋值,每次都要报错,然后手动修改。在属性设计时可不可以用什么特性指明不让窗体设计器自动为其赋值啊?
解决方案
解决方案二:
对于一个Control来说都是BackColor属性的而且是读写属性所以设计器时vs也很自然会对BackColor属性赋值为控件默认背景色但是你的BackColor是new出来的而且是只读所以vs并没有访问到控件本身的BackColor而对你的属性赋值去了该报错还是得报错tabcontrol背景色也是无效的但是微软的做法并不是newBackColorpublicclassTablControl:...{[/*不在属性窗口显示,不出现代码提示*/Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]protectedoverridColorBackColor{get{returnSystemColors.Control;}set{/*留空*/}}}
解决方案三:
额上面手打的代码修饰符写错了是public
解决方案四:
好多谢谢我试试。