我不是一个人

逆风的方向,更适合飞翔

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

VS2005中读写配置文件APP.CONFIG

1.
dot Net Framework 2.0里面的ConfigurationManager类是用来对app.config文件进行解析的
ConfigurationManager类里面有AppSettings和ConnectionStrings属性
前者返回的是在app.config文件中定义的Appsettings块中的key所对应的value
后者返回值是一个ConnectionStringSettings类型,其中包含ConnectionString
示例文件app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
     <add   name="myConnectString" connectionString="Database=(local)" />
   </connectionStrings>
   <appSettings>
     <add key="username" value="wxf"/>
     <add key="password" value="fxw"/>
   </appSettings>
</configuration>
示例解析程序
string ConnectString = System.Configuration.ConfigurationManager.ConnectionStrings["myConnectString"].ConnectionString;
         System.Diagnostics.Debug.WriteLine(ConnectString);
         System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["username"]);
         System.Diagnostics.Debug.WriteLine(System.Configuration.ConfigurationManager.AppSettings["password"]);
2.
除此之外也可以对app.config文件进行自定义配置,所用方法如下
1)在App.config文件的configuration节点中加入
     <configSections></configSections>在这两个节点中加入节点section的定义
     节点section的属性主要有name和type,name就是自己定义的节点名字,type由前后两部分组成
     前一部分是节点处理类的名字,后一部分是处理类所在的程序集的名字。
2) 定义自定义节点,级别与<ConfigSections并列
   
    以上两步完成之后,App.config如下所示
    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
     <section name="AppMenuSection" type="WinFormExamplesByWxfForTeachUse.AppMenuSectionHandler,
       WinFormExamplesByWxfForTeachUse"/>
   </configSections>
   <AppMenuSection>
     <DisplayMenus MenuItem="appMenuToolStripMenuItem" Text="AppMenu" Visible="true">
       <DisplayMenu MenuItem="appSubMenu1ToolStripMenuItem" Text="AppSubMenu1" Visible="true"></DisplayMenu>
       <DisplayMenu MenuItem="appSubMenu2ToolStripMenuItem" Text="AppSubMenu2" Visible="true"></DisplayMenu>
       <DisplayMenu MenuItem="appSubMenu3ToolStripMenuItem" Text="AppSubMenu3" Visible="true"></DisplayMenu>
     </DisplayMenus>
   </AppMenuSection>
</configuration>
3)自定义节点处理类,与上面section的type里面的名字统一,此类需要实现IConfigurationSectionHandler接口
    这个接口定义了一个函数
         object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section);
    需要在这个函数里面对section的内容进行解析,然后讲结果返回
    例如:
      class AppMenuSectionHandler:IConfigurationSectionHandler
     {
        object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section)
         {
            return section;
         }        
     }
   
4)在要获得section里面数据的程序内部进行如下调用
     System.Configuration.ConfigurationManager.GetSection("AppMenuSection");
     这个GetSection方法将会自动调用 3)步中实现的IConfigurationSectioinHandler接口中实现的函数,返回值自然是在函数实现过程中定义的返回值
    
     例如:
         private void ProcessCustomerConfiguration()
         {
             XmlNode myAppSettingsNode = (XmlNode)(System.Configuration.ConfigurationManager.GetSection("AppMenuSection"));
             XmlNode myMenuNode = myAppSettingsNode.SelectSingleNode("DisplayMenus");
            
             foreach (XmlNode subNode in myMenuNode.SelectNodes("DisplayMenu"))
             {
                 ToolStripMenuItem thisMenu=null;    
                 switch (subNode.Attributes["MenuItem"].InnerText)
                 {
                     case "appSubMenu1ToolStripMenuItem":
                         thisMenu = this.appSubMenu1ToolStripMenuItem;
                         break;
                     case "appSubMenu2ToolStripMenuItem":
                         thisMenu = appSubMenu2ToolStripMenuItem;
                         break;
                     case "appSubMenu3ToolStripMenuItem":
                         thisMenu = appSubMenu3ToolStripMenuItem;
                         break;                
                
                 }
                 thisMenu.Text = subNode.Attributes["Text"].InnerText;
                 thisMenu.Visible = Boolean.Parse(subNode.Attributes["Visible"].InnerText);
            
             }
         }
posted on 2008-03-21 13:09  点6K  阅读(1514)  评论(0)    收藏  举报