C#项目使用Properties.Settings保存数组
2017-06-17 11:14
302 查看
最近项目中遇到一个需要动态添加控件的上位机,假如使用固定名字的Settings保存cookies实在太麻烦。
WPF里是没有自带数组类型的setting的,所以需要自己添加。
新建一个窗口,拖五个textbox出来。
在Settings.settings里添加一个tbText 的string
保存后在解决方案资源管理器里用XML格式打开Settings.settings,将string类型改为string[ ] 数组,保存
然后主窗体就可以调用了。
需要注意的是Setting.Desinger.cs 里的代码会跟随Properties.Settings更改而被覆盖。
所以要么备份好Setting.Desinger.cs,要么在Settings.settings里新建完变量后就不要再动他了。
还有一点就是二维数组可以新建并读取到,但是保存不了。
<!--------------------更新 20170702--------------------------->
嗯,写完程序后发现该默认的Settings.settings是分“用户态”,“应用程序态”的,意思就是本地的根目录的配置拷到别的机器上还是默认的配置,不够“绿色”啊。
研究一下,发现是可以用App.config的,该配置会每次修改完都更新一下根目录下的exe.config,正是我想要的。
该App.config的写法跟自带的exe.config是大同小异的,一个XML。
唯一一点不好的是,貌似只能保存string。
所以所有的配置都需要转成string格式保存罗。
提供一下需要用到的函数以作备忘:
WPF里是没有自带数组类型的setting的,所以需要自己添加。
新建一个窗口,拖五个textbox出来。
在Settings.settings里添加一个tbText 的string
保存后在解决方案资源管理器里用XML格式打开Settings.settings,将string类型改为string[ ] 数组,保存
<?xml version='1.0' encoding='utf-8'?> <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="ts03.Properties" GeneratedClassName="Settings"> <Profiles /> <Settings> <Setting Name="tbText" Type="System.String[]" Scope="User"> <Value Profile="(Default)" /> </Setting> </Settings> </SettingsFile>然后打开Setting.Designer.cs
public Settings() { if (this.tbText == null) this.tbText = new string[] { "1", "2", "3", "4", "5" }; } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] public string[] tbText { get { return ((string[])(this["tbText"])); } set { this["tbText"] = (string[])value; } }
然后主窗体就可以调用了。
private void Form_Init() { for(int i = 0 ;i<5;i++) { string tbStr = "textBox" + (i + 1).ToString(); Control col = this.Controls.Find(tbStr, true)[0]; TextBox tbHandle = col as TextBox; tbHandle.Text = Properties.Settings.Default.tbText[i]; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { for (int i = 0; i < 5; i++) { string tbStr = "textBox" + (i + 1).ToString(); Control col = this.Controls.Find(tbStr, true)[0]; TextBox tbHandle = col as TextBox; Properties.Settings.Default.tbText[i] = tbHandle.Text; } Properties.Settings.Default.Save(); }
需要注意的是Setting.Desinger.cs 里的代码会跟随Properties.Settings更改而被覆盖。
所以要么备份好Setting.Desinger.cs,要么在Settings.settings里新建完变量后就不要再动他了。
还有一点就是二维数组可以新建并读取到,但是保存不了。
<!--------------------更新 20170702--------------------------->
嗯,写完程序后发现该默认的Settings.settings是分“用户态”,“应用程序态”的,意思就是本地的根目录的配置拷到别的机器上还是默认的配置,不够“绿色”啊。
研究一下,发现是可以用App.config的,该配置会每次修改完都更新一下根目录下的exe.config,正是我想要的。
该App.config的写法跟自带的exe.config是大同小异的,一个XML。
唯一一点不好的是,貌似只能保存string。
所以所有的配置都需要转成string格式保存罗。
提供一下需要用到的函数以作备忘:
str = string.Join("^", strAryVal); strAry = str.Split('^');用这两函数可以实现数组的序列化和反序列化,说白了就是将一个string数组打包成一个string,中间用"^"隔开,下次用的时候将一个string拆分成一个string数组。
相关文章推荐
- C#中使用设置 Properties.Settings.Default
- C#中使用设置(Settings.settings) Properties.Settings.Default .
- C#中使用设置(Settings.settings) Properties.Settings.Default
- C# winform或控制台Properties.Settings.Default的使用及存储位置
- C#中使用设置 Properties.Settings.Default
- C#中使用设置(Settings.settings) Properties.Settings.Default .
- C#项目的.settings文件中的自定义类型(及其数组)的配置步骤
- 开源gis项目Mitab在C#中的使用方法(原创)
- Unity项目开发中C#使用小技巧
- python笔记 使用numpy中的savez(save)保存非数组数据
- C# - 使用ConfigurationManager保存数据到App.config
- C#项目中使用 Selenium + PhantomJS 模拟登录博客园
- C#项目关于程序中使用管理员权限的程序的打包,需要注意的事项
- C# Bitmap保存的问题,eg:GDI+中发生一般性错误 .jpg 正由另一个进程使用 ,该进程无法访问文件
- 使用递归将一个整数各个数字保存到一个数组中
- C#使用多维数组
- (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)
- C# 枚举在项目中使用心得
- 使用 ref 和 out 传递数组(C# 编程指南)
- C# 保存 byte 数组 到文件中, 用vs2005 打开该文件查看