c# 我用 propertyGrid控件改变了label控件的背景颜色,我想下次再打开此窗体时,就是设置后的背景颜色。
具体是这样:每点击一次按钮就产生一个label在窗体上,并且用propertyGrid控件改变label的各种属性(大小,位置,背景颜色等),由于我每点击按钮就有labe...
具体是这样:每点击一次按钮就产生一个label在窗体上,并且用 propertyGrid控件改变label的各种属性(大小,位置,背景颜色等),由于我每点击按钮就有label产生,所以会有不定数量的label,我分别设置了他们的属性后,我希望能把我添加的这些label和他们的属性保存下来,下次再运行程序的时候,就可以不用再设置了,请问这个要怎么保存这些信息呢?
展开
3个回答
展开全部
1.首先,你要明白的是,你要保存的内容和propertyGrid控件是没有关系的,propertyGrid 控件只是为了方便管理并设置对象的信息,它仅仅只负责设置而已,如果哪天有可能,说不定你会采取另外一种方式来设置这些label的属性的。
2,对于控件的背景,颜色等信息的本地持久化,你可以用ApplicationSettingBase类的功能来实现,一般情况下我们项目中property文件夹下面有一个Setting1.cs的文件,这个setting 就是从ApplicationSettingBase继承过来的,用于保存应用程序的一些设置信息,当然对于label的背景,字体,颜色,位置都是可以保存,但你这里多个label,所以得额外处理一下 。
3.对于要保存的label的那些属性,应该有一个labelinfo这样的类吧,用于描述label的一些信息,比如这个labelinfo就应该提供的属性有,位置,背景颜色,字体等,而且你这个类要做成可序列化的,或者提供一个typeconvertor类,可以将这个labelinfo的对象转换成字符串,并且可以从字符串转换回来。
4.这一步就需要从ApplicationSettingBase继承一个类,这个类提供一个属性,这个属性应该是LabelInfo的集合,因为你要保存的是多个label,而且label的个数也不知道,比如这里的属性就可能是这样的List<LabelInfo> LabelInfos{get;set;},get,set里面的实现你可以参考自动生成的setting1类里面的一些属性的保存和读取,这个LabelInfos的属性上面应该用UserScopedSetting 这个特性进行标示。
5,这时候你就可以用代码保存你的label的信息了,遍历面板上面的所有的label,然后对每一个label构造一个LabelInfo对象,将这个LabelInfo对象添加到一个List<LabelInfo> 类型的集合中,最后将这个集合赋给上一步你创建的对象的LabelInfos属性,最好调用ApplicationSettingBase的Save方法就将这些信息保存到本地了。
6,反序列化的过程相反,你从自定义的ApplicationSettingBase中取到LabelInfos属性,然后遍历这里面的每一个,重新构造一个label就行了。
2,对于控件的背景,颜色等信息的本地持久化,你可以用ApplicationSettingBase类的功能来实现,一般情况下我们项目中property文件夹下面有一个Setting1.cs的文件,这个setting 就是从ApplicationSettingBase继承过来的,用于保存应用程序的一些设置信息,当然对于label的背景,字体,颜色,位置都是可以保存,但你这里多个label,所以得额外处理一下 。
3.对于要保存的label的那些属性,应该有一个labelinfo这样的类吧,用于描述label的一些信息,比如这个labelinfo就应该提供的属性有,位置,背景颜色,字体等,而且你这个类要做成可序列化的,或者提供一个typeconvertor类,可以将这个labelinfo的对象转换成字符串,并且可以从字符串转换回来。
4.这一步就需要从ApplicationSettingBase继承一个类,这个类提供一个属性,这个属性应该是LabelInfo的集合,因为你要保存的是多个label,而且label的个数也不知道,比如这里的属性就可能是这样的List<LabelInfo> LabelInfos{get;set;},get,set里面的实现你可以参考自动生成的setting1类里面的一些属性的保存和读取,这个LabelInfos的属性上面应该用UserScopedSetting 这个特性进行标示。
5,这时候你就可以用代码保存你的label的信息了,遍历面板上面的所有的label,然后对每一个label构造一个LabelInfo对象,将这个LabelInfo对象添加到一个List<LabelInfo> 类型的集合中,最后将这个集合赋给上一步你创建的对象的LabelInfos属性,最好调用ApplicationSettingBase的Save方法就将这些信息保存到本地了。
6,反序列化的过程相反,你从自定义的ApplicationSettingBase中取到LabelInfos属性,然后遍历这里面的每一个,重新构造一个label就行了。
更多追问追答
追问
可以留下您的联系方式吗?我想具体请教一下~~
追答
270076603
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询