问题描述
我为控件自定义了一个属性,类型是QQFormSkin:publicclassQQFormSkin{publicColorBackColor=Color.FromArgb(0,192,192);publicdoubleOpacity=1.0;publicImageBackImage=null;publicstringBackImageFile;}定义属性:privateQQFormSkin_fskin;[Description("设置窗体皮肤"),EditorBrowsable(EditorBrowsableState.Always),DesignerSerializationVisibility(DesignerSerializationVisibility.Content)][DefaultValue(typeof(QQFormSkin),"")]publicQQFormSkinFormSkin{get{returnthis._fskin;}set{if(value!=_fskin){_fskin=value;this.Opacity=this._fskin.Opacity;}}}我有两点疑问,试了很久,解决不了,还请高手们帮忙给解答下:1.如何让控件的属性框内显示FormSkin属性,其属性(内含BackColor,Opacity,BackImage,BackImageFile)是可以展开的,并且可以赋值。2.我将这个控件一个实例的FormSkin属性直接传递给这个控件的第二个实例,并且只传递这个属性,在另第二个实例里修改第二个实例的FormSkin属性时,如何实时动态传递给第一个实例的Opacity属性。因为修改第二个实例的FormSkin属性时,和第一个实例的FormSkin是引用关系,第一个实例的FormSkin属性的值会变掉,但因为不能实时调用FormSkin的Set方法,因此就不能执行this.Opacity=this._fskin.Opacity;。不知大家有解决方案或更好的办法吗?非常感谢!
解决方案
解决方案二:
自定义控件没有Opacity属性,this.Opacity=this._fskin.Opacity;
这句编译都通不过不知道LZ是怎么定义这个属性的
解决方案三:
参照TypeConverter的使用自己百度吧。。而<GDI+程序设计>一书中就有
解决方案四:
属性和成员用法一样,定义是不一样的.
解决方案五:
通过事件让实例1知道值改了,然后让实例1自己赋值。具体方法:在实例2中定义一个事件,在实例1中绑定事件,在引发事件的时候就能够调用实例1中赋值的方法
解决方案六:
我是在自定义窗体,所以有Opacity属性,因为一些原因,不过这个属性被我用newOpacity覆盖掉了。