!!无须定义配置文件中的每个变量的读写操作,以下代码遍历界面中各个c#控件,自动记录其文本,作为配置文件保存
namespace PluginLib
{
/// <summary>
/// 遍历控件所有子控件并初始化或保存其值
/// </summary>
public class FormHelper
{
private static string Path
{
get
{
return Plugin.Path + "\\BufferFile.ini";
}
}
static IniFile iniFile = null;
/// <summary>
/// 保存控件值
/// </summary>
/// <param name="control"></param>
public static void SaveControl(Control control)
{
FileStream fs;
if (File.Exists(Path))
{
File.Delete(Path);
}
fs = File.Create(Path);
fs.Close();
iniFile = new IniFile(Path);
GetControlValue(control);
iniFile = null;
}
private static void GetControlValue(Control control)
{
foreach (Control ctl in control.Controls)
{
if (!ctl.HasChildren)
{
if (ctl.Parent is System.Windows.Forms.NumericUpDown)
{
NumericUpDown tempNumberic = ctl.Parent as NumericUpDown;
iniFile.IniWriteValue("NumericUpDown", tempNumberic.Name, tempNumberic.Value.ToString());
}
else if (ctl is CheckBox)
{
iniFile.IniWriteValue("CheckBox", ctl.Name, ((CheckBox)ctl).Checked.ToString());
}
else if (ctl is RadioButton)
{
iniFile.IniWriteValue("RadioButton", ctl.Name, ((RadioButton)ctl).Checked.ToString());
}
else if (ctl is TextBox)
{
iniFile.IniWriteValue("TextBox", ctl.Name, ((TextBox)ctl).Text);
}
else if (ctl is ComboBox)
{
iniFile.IniWriteValue("ComboBox", ctl.Name, ((ComboBox)ctl).Text);
}
else if (ctl is TrackBar)
{
iniFile.IniWriteValue("TrackBar", ctl.Name, ((TrackBar)ctl).Value.ToString());
}
else if (ctl is CheckBoxX)
{
iniFile.IniWriteValue("CheckBoxX", ctl.Name, ((CheckBoxX)ctl).Checked.ToString());
}
else if (ctl is TextBoxX)
{
iniFile.IniWriteValue("TextBoxX", ctl.Name, ((TextBoxX)ctl).Text.ToString());
}
else if (ctl is RichTextBox)
{
string[] strs = Regex.Split(((RichTextBox)ctl).Text.Trim(),"\n");
int i = 0;
foreach (string str in strs)
{
iniFile.IniWriteValue("RichTextBox="+ctl.Name, "row" + i, str);
i++;
}
}
}
else
{
GetControlValue(ctl);
}
}
}
/// <summary>
/// 加载控件值
/// </summary>
/// <param name="control"></param>
public static void LoadControl(Control control)
{
iniFile = new IniFile(Path);
ForeachControl(control);
iniFile = null;
}
private static void ForeachControl(Control control)
{
foreach (Control ctl in control.Controls)
{
if (!ctl.HasChildren)
{
if (ctl.Parent is System.Windows.Forms.NumericUpDown)
{
NumericUpDown tempNumberic = ctl.Parent as NumericUpDown;
if (!string.IsNullOrEmpty(iniFile.IniReadValue("NumericUpDown", tempNumberic.Name)))
{
tempNumberic.Value = Convert.ToDecimal(iniFile.IniReadValue("NumericUpDown", tempNumberic.Name));
}
}
else if (ctl is CheckBox)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("CheckBox", ctl.Name)))
((CheckBox)ctl).Checked = Convert.ToBoolean(iniFile.IniReadValue("CheckBox", ctl.Name));
}
else if (ctl is RadioButton)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("RadioButton", ctl.Name)))
((RadioButton)ctl).Checked = Convert.ToBoolean(iniFile.IniReadValue("RadioButton", ctl.Name));
}
else if (ctl is TextBox)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("TextBox", ctl.Name)))
((TextBox)ctl).Text = iniFile.IniReadValue("TextBox", ctl.Name);
}
else if (ctl is ComboBox)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("ComboBox", ctl.Name)))
((ComboBox)ctl).Text = iniFile.IniReadValue("ComboBox", ctl.Name);
}
else if (ctl is TrackBar)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("TrackBar", ctl.Name)))
((TrackBar)ctl).Value = Convert.ToInt32(iniFile.IniReadValue("TrackBar", ctl.Name));
}
else if (ctl is CheckBoxX)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("CheckBoxX", ctl.Name)))
((CheckBoxX)ctl).Checked = Convert.ToBoolean(iniFile.IniReadValue("CheckBoxX", ctl.Name));
}
else if (ctl is TextBoxX)
{
if (!string.IsNullOrEmpty(iniFile.IniReadValue("TextBoxX", ctl.Name)))
((TextBoxX)ctl).Text = iniFile.IniReadValue("TextBoxX", ctl.Name);
}
else if (ctl is RichTextBox)
{
int i = 0;
while(!string.IsNullOrEmpty(iniFile.IniReadValue("RichTextBox=" + ctl.Name, "row"+i)))
{
((RichTextBox)ctl).Text += iniFile.IniReadValue("RichTextBox=" + ctl.Name, "row"+i)+"\n";
i++;
}
}
}
else
{
ForeachControl(ctl);
}
}
}
}
}
!!无须定义配置文件中的每个变量的读写操作,以下代码遍历界面中各个c#控件,自动记录其文本,作为配置文件保存的更多相关文章
- 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程
继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...
- 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件
原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ...
- MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件
类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...
- C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为
在 CSDN 上经常看到以下两个问题:1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 CHtmlView 在内),如何可以把该控件的三维边框禁止掉?2.在 MFC 应用程 ...
- 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免
在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...
- sql中关于存在就不做操作的代码块
前言: 在开发中,经常会对数据库表进行新增修改操作,那么如果表中的属性信息已然存在啦!就没必要去做重复的操作了... 代码块 BEGIN SELECT "COUNT"(*) int ...
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
- 025 Spark中的广播变量原理以及测试(共享变量是spark中第二个抽象)
一:来源 1.说明 为啥要有这个广播变量呢. 一些常亮在Driver中定义,然后Task在Executor上执行. 如果,有多个任务在执行,每个任务需要,就会造成浪费. 二:共享变量的官网 1.官网 ...
- Java中的静态变量、静态方法、静态代码块
转载自http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html (一)静态方法(1)在Java里,可以定义一个不需要创建对 ...
随机推荐
- MySQL批量杀进程
OS: CentOS 6.3 DB:5.5.14 mysql> show processlist;+----+------+-----------+--------------------+-- ...
- ArcGIS For JavaScript API 默认参数
“esri.config”的是在1.3版中的的“esriConfig”的替代品.如果您使用的是1.2或更低的版本,您应该参阅默认API v1.2和更低的配置.对于版本1.3或更高版本,您可以使用“es ...
- C/C++运算符优先级
运算符优先级从高至低 优先级 操作符 描述 例子 结合性 1 ()[]->.::++-- 调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作 ...
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
说明: 操作系统:CentOS 6.2 32位 系统安装教程:CentOS 6.2安装(超级详细图解教程): http://www.osyunwei.com/archives/1537.html 准备 ...
- (菜鸟要飞系列)四,基于Asp.Net MVC5的后台管理系统(zTree绑定Json数据生成树)
上一次老师让我们用递归将中国城市镇县四级联动 显示在树上,那个时候就知道可以显示在zTree上,可是苦于对Json的不了解,对zTree的Api的不了解,一直没有做出来,只好将递归算法显示在了窗体上, ...
- 使用jquery控制只能输入数字,并且关闭输入法(转)
控制文本框只能输入数字是一个很常见的需求,比如电话号码的输入.数量的输入等,这时候就需要我们控制文本框只能输入数字.在用js控制之后在英文输入法的状态下去敲击键盘上的非数字键是输不进去的,然而当你转到 ...
- java ZIP压缩文件
问题描述: 使用java ZIP压缩文件和目录 问题解决: (1)单个文件压缩 注: 以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...
- 【BZOJ】【1070】【SCOI2007】修车
网络流/费用流 好神奇的建模= = 关键就是把每个技术员拆成n个点,表示这个技术员倒数第几个修的车子.. 考虑第i个工人,他修第j辆车只对后面要修的车有影响,而前面修过的车已经对当前没有影响了.而这个 ...
- specular map normal map gloss map
http://www.marmoset.co/toolbag/learn/materials http://digitalerr0r.wordpress.com/2009/03/26/xna-shad ...
- setblendstate & setdepthstencilstate
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476462(v=vs.85).aspx blendstate blendfacto ...