Olá pessoal, hoje eu vou falar um pouco sobre Windows Forms Application. Muitas vezes precisamos alterar algumas configurações dinamicamente, ou seja, alterar alguns dados dentro do arquivo App.config em tempo de execução.
   
    O que vou falar e mostrar hoje é: método que pode alterar arquivo de configuração dinamicamente, passando o nome da chave o valor.

Usado:
Visual Studio .NET 2010
Framework: 4.0
Plataforma: Windows Forms Application
Linguagem: C#

    É bem simples o que vou mostrar aqui, porém muito útil no dia a dia. Muitos não sabem fazer, então resolvi fazer e postar aqui no site.

    O primeiro passo foi criar um aplicativo do tipo Windows Forms Application. O segundo passo foi criar uma classe chamada Configuracao.cs, pública e estática; ou seja; aquela que não precisa instanciar. (Imagem 1)



Referência: Imagem 1
   
Dentro da classe, criei um método público e estático chamado UpdateAppSettins.

public static void UpdateAppSettings(string chave, string valor){}

    Note que o método recebe uma string chave e uma string valor. No campo chave, deve ser passado o nome da chave do arquivo de configuração e o valor deve ser passado o valor que será atribuído em tempo de execução. (Código 1)

public static void UpdateAppSettings(string chave, string valor)
        {
            // Open App.Config of executable
            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
           
            // Add an Application Setting.
            config.AppSettings.Settings.Remove(chave);
            config.AppSettings.Settings.Add(chave, valor);
           
            // Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified);
           
            // Force a reload of a changed section.
            ConfigurationManager.RefreshSection("appSettings");
        }

Código 1

    Note que a primeira linha de código, eu abro o arquivo App.config. Adicionei depois o Application Settings, salvo a modificação e faço um refreshSection para atualizar. Sem esse refresh o valor trocado não será utilizado com o .exe que está rodando.

Layout

    Depois de criar a classe e o método, criei o layout para utilização. (Imagem 2)



Referência: Imagem 2

    No clique do botão, chamo o método passando o nome da tag do settings e o valor que desejo atribuir. (Código 2)


        private void cmdConfigurar_Click(object sender, EventArgs e)
        {
            try
            {
                Configuracao.UpdateAppSettings("nome", "mauricio");
                Configuracao.UpdateAppSettings("teclado", "ABNT2");
               
                MessageBox.Show("Alterado com sucesso");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Código 2
   
    É bem simples e fácil depois que o método é criado.  Lógico que o arquivo App.config precisa ser adicionado junto ao projeto.

Criação do App.config


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="nome" value="valor"/>
    <add key="Teclado" value="ABNT"/>
  </appSettings>
</configuration>

Código 3

    No código 3, mostro a tag adicionado com um valor qualquer e na mudança via código o mesmo fica da seguinte maneira. (Código 4)


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="nome" value="mauricio" />
    <add key="teclado" value="ABNT2" />
  </appSettings>
</configuration>

Código 4.

    Fico por aqui e qualquer dúvida pode entrar em contato pelo site, agradeço.