如何显示app.config文件中的值

时间:2016-05-25 06:33:34

标签: c# app-config

当鼠标悬停在按钮上时,我有一个循环递增并显示增量编号。每个按钮的值存储在app.config文件中。我是否使用递增的值来显示正确的值名称?

当前代码

public void Controls()
{
    for (int i = 1; i <= Applications; i++)
    {
        string iconPath = ConfigurationManager.AppSettings["Application"+i+"_Icon"];
        Button button = new Button();

        this.Controls.Add(button);
        top += button.Height+25;
        button.Tag = i;
        button.MouseHover += Button_MouseHover;
        button.MouseLeave += Button_MouseLeave;
        button.Visible = true;

        button.Click += new EventHandler(button_Click);
   }

app.config

 <appSettings>
  <add key="Applications" value="3" />

  <add key="Catergory" value="1"/>
  <add key="Application1_Name" value="word"/>
  <add key="Application1_Executable_Name" value="word.exe"/>
  <add key="Application1_AutoClose" value="true"/>
  <add key="Application1_Icon" value="C:\pictures\images.png"/>

   <add key="Catergory" value="1"/>
  <add key="Application2_Name" value="Paint"/>
  <add key="Application2_Executable_Path" value="C:\Windows\System32\"/>
  <add key="Application2_AutoClose" value="true"/>
  <add key="Application2_Icon" value="C:\pictures\images.png"/>


  <add key="Catergory" value="1"/>
  <add key="Application3_Name" value="notepad"/>
  <add key="Application3_Executable_Path" value="C:\Windows\"/>
  <add key="Application3_AutoClose" value="true"/>
  <add key="Application3_Icon" value="C:\pictures\images.png"/>

</appSettings>

目前,当我将鼠标悬停在一个按钮上时,它会显示值1,2,3,但我想让它显示记事本,Word,Paint。

我尝试了什么

public void Controls()
{
        for (int i = 1; i <= Applications; i++)
        {
            NameValueCollection sAll;
            sAll = ConfigurationManager.AppSettings;

            Button button = new Button();

            this.Controls.Add(button);
            top += button.Height+25;
            button.Tag = i;

            foreach(string s in sAll.AllKeys)
            {
                button.Text = s + i ;
            }
        }
}

这样做是因为它显示了1,2,3并且为所有内容显示了油漆。

4 个答案:

答案 0 :(得分:3)

您的s变量实际上是appSetting密钥。您需要进一步传递此Key以将相应的appSetting值设为ConfigurationManager.AppSettings

        NameValueCollection sAll;
        sAll = ConfigurationManager.AppSettings;

        foreach (string s in sAll.AllKeys)
        {
            var applicationNamevalue = sAll [s];//Just for demonstration, should combine these statements.
            button.Text = applicationNamevalue + i; //and set it as button text.
        }

是的,@Shivang是一个很好的建议,如果你真的不关心密钥的值,那么可以直接使用索引来获取配置值。

答案 1 :(得分:2)

试试这个

string value = ConfigurationManager.AppSettings["Key"];

因此,对于您的情况,请使用NameValueCollection中的值,而不是键

    button.Text = sAll[s] + i ;

答案 2 :(得分:0)

因为您需要键的值,所以您应该在循环中执行类似的操作。

你不需要foreach循环。

使用以下内容可以帮助您

当您使用foreach循环时,根本不需要。

因此删除它会因为它会增加时间复杂度。

如果您的App.config中有多个密钥,但是您想要获取其中的一些密钥,那么您应该具有Application_Name的指定格式,如:

  • APPLICATION_NAME1
  • APPLICATION_NAME2
  • application_name3
  • application_name4

然后在您的代码中执行以下操作,然后只需将密钥添加到配置文件中即可添加任意数量的按钮。

public void Controls()
    {
            for (int i = 1; i <= Applications; i++)
            {
                NameValueCollection sAll;
                sAll = ConfigurationManager.AppSettings;

                Button button = new Button();

                this.Controls.Add(button);
                top += button.Height+25;
                button.Tag = i;
                button.Text = sAll["application_name"+i] ;
            }
    }

答案 3 :(得分:0)

在你的app配置文件中,更好更干净的方法是在这样的配置部分添加应用程序名称

<configSections>
    <section name="ApplicationList" type="System.Configuration.NameValueSectionHandler" />
<configSections>

然后添加连接到配置部分的每个应用程序名称

<ApplicationList>
    <add key="1" value="Notepad"/>
    <add key="2" value="Word"/>
    <add key="3" value="Paint"/>
</ApplicationList>

然后可以像这样使用

var applications = ConfigurationManager.GetSection("ApplicationList") as NameValueCollection;
for (int i = 0; i < applications.Count; i++)
{
   var applicationName = applications[i].ToString() ;
}

结束控制功能中的逻辑:如果totalApplication获取所有当前应用程序,那么为什么要循环遍历sAll.AllKeys中的每个名称?

不应该像这样编码循环

public void Controls()
  {
       var applications = ConfigurationManager.GetSection("ApplicationList") as NameValueCollection;
        for (int i = 0; i < applications.Count; i++)
        {
            var button = new Button();

            this.Controls.Add(button);
            top += button.Height+25;
            button.Tag = i;
            button.Text = applications[i].ToString();
        }
   }