代码拉取完成,页面将自动刷新
现有一个IniFile类,通过包装kernel32.dll中的函数提供了以下几个读写.ini文件的方法:
public int ReadInt(string section, string name, int def)
public string ReadString(string section, string name, string def = "")
public void WriteInt(string section, string name, int Ival)
public void WriteString(string section, string name, string strVal)
希望使用IniFile类来读取/保存WindowsForm程序中某些控件(例如ComboBox, CheckBox, NumericUpDown, TextBox...)的值或状态,但存在以下问题:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//业务功能代码
//将值写入.ini文件的代码
}
//使用IniFile类的实例初始化
ConfigManager configManger = new ConfigManager(new IniFile(path));
//使用获取文件路径的委托实例初始化
ConfigManager configManger = new ConfigManager(new GetConfig(getPathMethod));
configManger.Add(checkBox1, “Section1”, “Name1”);
configManger.Add(comboBox1, “Section1”, “Name2”);
configManger.Add(numericUpDown1, “Section2”, “Name1”);
如果不需要自定义节/键名,推荐使用控件所在窗口的完全限定类型名称作为节,控件的Name属性作为键,可保证唯一性,且操作更简单
foreach (Control item in this.Controls)
{
Type t = item.GetType();
if(t == typeof(CheckBox) || t == typeof(ComboBox) || t == typeof(NumericUpDown))
{
configManger.Add(item,this.GetType().ToString(),item.Name);
}
}
使用ConfigManager的实例方法Init可对所有控件执行读操作,并返回错误信息的列表
IList<string> errors = configManger.Init();
也可以对单个控件执行读操作,前提是控件已使用Add方法添加到列表中
string error = configManger.Read(item)
当使用Add方法添加控件时,已将保存操作绑定到了控件对应的事件上,当事件触发时将自动保存。如果不想再执行保存,可以使用实例的Remove方法,该方法将控件从列表中移除,同时也将保存操作从控件的事件响应委托链上移除
configManager.Remove(item)
ConfigManager类中初始化了ComboBox, CheckBox, NumericUpDown控件的策略,可以为ConfigManager实例动态地添加新的策略,例如下面代码为它添加一个针对TextBox控件的策略
private string readTextBox(object item)
{
//读取操作
}
private void bindTextBox(object item, bool remove = false)
{
//这里要提供移除委托的方法,否则移除控件时保存操作不会从事件响应委托链上移除
if (remove)
{
(item as TextBox).TextChanged -= this.TextBoxTextChange;
}
else
{
(item as TextBox).TextChanged += this.TextBoxTextChange;
}
}
private void TextBoxTextChange(object sender, EventArgs e)
{
//保存操作
}
configManager.AddReader(typeof(TextBox).ToString(), new ConfigManager.Reader(readTextBox));
configManager.AddEventBind(typeof(TextBox).ToString(), new ConfigManager.EventBind(bindTextBox));
可以通过指定控件的类型名称来移除相应的策略
configManager.RemoveEventBind(typeof(TextBox).ToString());
configManager.RemoveReader(typeof(TextBox).ToString());
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。