De app.config file kan dienst doen als vervanging van de klassieke INI files en kan men bepaalde settings erin bewaren en/of aanpassen.

App.config file ziet erzo uit :

  1: <appSettings>
  2:     <add key="SmtpServer" value="smtp.yourisp.tld" />
  3:     <add key="MailFrom" value="you@yourdomain.tld" />
  4:     <add key="ClientSettingsProvider.ServiceUri" value="" />
  5:   </appSettings>
  6: 

In dit voorbeeld worden de SmtpServer en MailFrom aangepast volgens de optie van de gebruiker en wordt dan overschreven in de app.config file en wordt de applicatie heropgestart om de aanpassingen zijn effect te kunnen laten doen.

De volgende Imports hebben we nodig :

  1: Imports System.Xml

En de volgende Funtie :

  1: Public Function Save_Config_Parameter(ByVal MyKey As String, ByVal MyValue As String) As String
  2:         Dim XmlDocument As New XmlDocument()
  3:         Dim XmlNode As XmlNode
  4:         Dim XmlRoot As XmlNode
  5:         Dim XmlKey As XmlNode
  6:         Dim XmlValue As XmlNode
  7: 
  8:         Save_Config_Parameter = ""
  9:         XmlDocument.Load(Application.ExecutablePath & ".config")
 10:         XmlNode = XmlDocument.DocumentElement.SelectSingleNode("/configuration/appSettings/add[@key=""" & MyKey & """]")
 11: 
 12:         If XmlNode Is Nothing Then
 13:             XmlNode = XmlDocument.CreateNode(XmlNodeType.Element, "add", "")
 14:             XmlKey = XmlDocument.CreateNode(XmlNodeType.Attribute, "key", "")
 15:             XmlKey.Value = MyKey
 16:             XmlNode.Attributes.SetNamedItem(XmlKey)
 17:             XmlValue = XmlDocument.CreateNode(XmlNodeType.Attribute, "value", "")
 18:             XmlValue.Value = MyValue
 19:             XmlNode.Attributes.SetNamedItem(XmlValue)
 20:             XmlRoot = XmlDocument.DocumentElement.SelectSingleNode("/configuration/appSettings")
 21:             If Not XmlRoot Is Nothing Then
 22:                 XmlRoot.AppendChild(XmlNode)
 23:             Else
 24:                 Save_Config_Parameter = "ERROR"
 25:             End If
 26:         Else
 27:             XmlNode.Attributes.GetNamedItem("value").Value = MyValue
 28:         End If
 29:         XmlDocument.Save(Application.ExecutablePath & ".config")
 30:         XmlDocument = Nothing
 31:     End Function
 32: 

De gebruiker heeft een optie scherm om zijn gegevens op in te vullen :

paul015

In de form_Load halen we de gegevens op uit de app.config file

  1: Private Sub frmOpties_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2:         txtSmtpServer.Text = ConfigurationManager.AppSettings("SmtpServer")
  3:         txtMailFrom.Text = ConfigurationManager.AppSettings("MailFrom")
  4:     End Sub
  5: 

Na het aanpassen van de gebruiker zijn gegevens gaan we de settings wegschrijven naar de app.config file en de applicatie moet herstart worden :

  1: Private Sub btnApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApply.Click
  2:         Dim Resultaat As String = Nothing
  3:         Resultaat = Save_Config_Parameter("SmtpServer", txtSmtpServer.Text)
  4:         Resultaat = Save_Config_Parameter("MailFrom", txtMailFrom.Text)
  5:         ConfigurationManager.RefreshSection("appSettings")
  6:         MessageBox.Show("Opgelet er zijn veranderingen aangebracht en bij OK word de applicatie herstart.", "Opgelet", MessageBoxButtons.OK, MessageBoxIcon.Information)
  7:         Application.Restart()
  8:     End Sub
  9: 

Let op! Dit resultaat is niet zichtbaar in design mode alleen bij de release .exe en bijhorende app.config file.

Na het opstarten zijn de optie’s aangepast :

eric001

Om deze gegevens dan te gebuiken in de applicatie :

  1: Imports System.Configuration
  2: Dim XmlDocument As New XmlDocument()
  3:     Dim XmlNode As XmlNode
  4:     Dim XmlRoot As XmlNode
  5:     
  6: Dim SmtpServer As String = Nothing
  7:         Dim MailFrom As String = Nothing
  8:         XmlDocument.Load(Application.ExecutablePath & ".config")
  9:         XmlRoot = XmlDocument.DocumentElement.SelectSingleNode("/configuration/appSettings")
 10:         For Each node As XmlNode In XmlRoot
 11:             If node.Attributes("key").Value = "SmtpServer" Then
 12:                 SmtpServer = node.Attributes("value").Value
 13:             End If
 14:             If node.Attributes("key").Value = "MailFrom" Then
 15:                 MailFrom = node.Attributes("value").Value
 16:             End If
 17:         Next
 18:         Dim smtpClient As New System.Net.Mail.SmtpClient(SmtpServer)
 19: