及时加载App.config

gidiyi 2010-02-08 11:21:24
我的程序有两个窗体 form1(主窗体) 和 form2(主要显示配置文件里的节点信息)

form1 上面有个 按钮 点击一下 show出form2并且显示配置文件里的节点信息,当我在form2里修改了节点信息并且保存关闭fomr2,实际上配置文件里的信息被修改了,但是怎么能让form1也及时的再加载一下app.config??


前提是程序不关闭,一直在运行
...全文
458 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
极地_雪狼 2010-02-09
  • 打赏
  • 举报
回复
你可以在FORM2中增加一个属性,parentFrm 类型为 Form1
你执行完以后,在将parentFrm Reload一下就Ok了
flyerwing 2010-02-09
  • 打赏
  • 举报
回复
一:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");


二:

Properties.Settings.Default.Reset();
Properties.Settings.Default.Reload();

三:

string configFileName = Application.ExecutablePath + ".config";
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(configFileName);
string configString = @"configuration/applicationSettings/SetConfig.Properties.Settings/setting[@name='appSetting1']/value";
System.Xml.XmlNode configNode = doc.SelectSingleNode(configString);
if (configNode != null)
{
configNode.InnerText = this.appSetting1TextBox.Text;
doc.Save(configFileName);
Properties.Settings.Default.Reload(); // 刷新应用程序设置,下次读取时才能读到最新的值。
}


随便试下估计就成吧
gidiyi 2010-02-09
  • 打赏
  • 举报
回复
引用 14 楼 wuyq11 的回复:
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

人生如梦 你好:
我的情况是这样的,我有一个专门的静态类,里面的字段都是静态的读取配置文件,逻辑应该是程序启动的时候都已经读取配置文件的值加载到内存了,在程序一直运行的情况下我修改了配置文件,在这种情况下我通过程序又修改了配置文件的值,应该不会把内存的值也修改的,所以我想在程序不关闭的情况下也让程序启动时候读取到内存的值也变成我后来更改的值,能不能帮帮小弟,你写的两句代码我也不知道改写到哪里,也不怎么会用,请教你了
lzsh0622 2010-02-08
  • 打赏
  • 举报
回复
Properties.Settings.Default.Reset();
Properties.Settings.Default.Reload();
flyerwing 2010-02-08
  • 打赏
  • 举报
回复

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
lzsh0622 2010-02-08
  • 打赏
  • 举报
回复
Properties.Settings.Default.Reset();
ershou007 2010-02-08
  • 打赏
  • 举报
回复
那你在form2修改以后,再重新赋值:

startTime = ConfigurationManager.AppSettings["startTime"];
name= ConfigurationManager.AppSettings["name"];
gidiyi 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ershou007 的回复:]
引用 2 楼 gidiyi 的回复:
引用 1 楼 ershou007 的回复:
再重新读取字段吧。

能不能说的清楚一点大侠,我的程序都是用的静态属性读取的配置文件,所以当程序修改了配置文件以后,主窗体如何再次获得呢??、


重新读取字段后,再给静态属性赋值就行了,我现在有点不大明白你是怎么读取配置文件的。
[/Quote]

//程序开始运行时间
public static string startTime = ConfigurationManager.AppSettings["startTime"];
//窗体上显示的名字
public static string name= ConfigurationManager.AppSettings["name"];

我是这样得到的值,这些值在主窗体上显示或者用到,所以在form2修改了以后要主窗体自动的在加载一个配置文件
ershou007 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gidiyi 的回复:]
引用 1 楼 ershou007 的回复:
再重新读取字段吧。

能不能说的清楚一点大侠,我的程序都是用的静态属性读取的配置文件,所以当程序修改了配置文件以后,主窗体如何再次获得呢??、
[/Quote]

重新读取字段后,再给静态属性赋值就行了,我现在有点不大明白你是怎么读取配置文件的。
gidiyi 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ershou007 的回复:]
再重新读取字段吧。
[/Quote]
能不能说的清楚一点大侠,我的程序都是用的静态属性读取的配置文件,所以当程序修改了配置文件以后,主窗体如何再次获得呢??、
ershou007 2010-02-08
  • 打赏
  • 举报
回复
再重新读取字段吧。
wuyq11 2010-02-08
  • 打赏
  • 举报
回复
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
qldsrx 2010-02-08
  • 打赏
  • 举报
回复
你的那个调用方法是取的静态值,所以不会动态改变,更新配置文件中静态值的方法就是调用ConfigurationManager.RefreshSection方法,显然#7楼已经给出了方法了。
lzsh0622 2010-02-08
  • 打赏
  • 举报
回复
引用 11 楼 gidiyi 的回复:
我不想让它下次读取才能得到的,我的配置文件加载到窗体功能实现了,修改后保存也实现了,就是怎么才能使程序不关闭的情况下自动的读取已修改后的值


试过没有? 你怎么理解下次读取.
gidiyi 2010-02-08
  • 打赏
  • 举报
回复
引用 10 楼 lzsh0622 的回复:
Application 范围配置文件在运行时是“只读”的。
使用 XmlDocument 来直接保存 config 文件,然后在 Reload 设置。

C# codestring configFileName= Application.ExecutablePath+".config";
System.Xml.XmlDocument doc=new System.Xml.XmlDocument();
doc.Load(configFileName);string configString=@"configuration/applicationSettings/SetConfig.Properties.Settings/setting[@name='appSetting1']/value";
System.Xml.XmlNode configNode= doc.SelectSingleNode(configString);if (configNode!=null)
{
configNode.InnerText=this.appSetting1TextBox.Text;
doc.Save(configFileName);
Properties.Settings.Default.Reload();// 刷新应用程序设置,下次读取时才能读到最新的值。}


我不想让它下次读取才能得到的,我的配置文件加载到窗体功能实现了,修改后保存也实现了,就是怎么才能使程序不关闭的情况下自动的读取已修改后的值
lzsh0622 2010-02-08
  • 打赏
  • 举报
回复
Application 范围配置文件在运行时是“只读”的。
使用 XmlDocument 来直接保存 config 文件,然后在 Reload 设置。


string configFileName = Application.ExecutablePath + ".config";
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(configFileName);
string configString = @"configuration/applicationSettings/SetConfig.Properties.Settings/setting[@name='appSetting1']/value";
System.Xml.XmlNode configNode = doc.SelectSingleNode(configString);
if (configNode != null)
{
configNode.InnerText = this.appSetting1TextBox.Text;
doc.Save(configFileName);
Properties.Settings.Default.Reload(); // 刷新应用程序设置,下次读取时才能读到最新的值。
}
gidiyi 2010-02-08
  • 打赏
  • 举报
回复
7# 和 8# 的兄弟们 你们的代码如何用啊,小弟看不懂,也不知道应该现在什么地方才能起到我想要的效果啊?麻烦指导一下

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧