Modifier le fichier "settings.settings" à partir du nom de l'attribut

Soyez le premier à donner votre avis sur cette source.

Vue 3 606 fois - Téléchargée 149 fois

Description

Afin de pouvoir utiliser ce code, il vous faudra :

- un fichier Settings.settings (généré par VS) provenant du projet ou d'un projet dont vous souhaitez modifier le contenu des paramètres
- faire référence à System.Xml
- faire un Imports de System.Xml
- créer une nouvelle solution

Il y a aussi une mini partie permettant de démarrer/arrêter un service dont on connait l'attribut "Service Name".

Ce code utilise une textbox pour contenir et attribuer la valeur du Setting voulu mais ce n'est pas le seul outil qui vous est accessible...

Afin d'enregistrer les changements, validez la saisie par la touche "Entrer"

Source / Exemple :


Imports System.Xml

Public Class FormServiceConfiguration

    Private srvController As New ServiceController("ServiceExtraction")
    Private documentXML As New XmlDocument
    Private node As XmlNode
    Private Const CHEMIN As String = "C:\Documents and Settings\xxx\Mes documents\Visual Studio 2008\Projects\Test\My Project\Settings.settings"

    ''' <summary>
    ''' Menu Quitter.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Quitter l'application</remarks>
    Private Sub QuitterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles QuitterToolStripMenuItem.Click
        Application.Exit()
    End Sub

    ''' <summary>
    ''' DemarrerService.
    ''' </summary>
    ''' <remarks>Démarre le service "Service Extraction"</remarks>
    Private Sub DemarrerService()
        srvController.Start()
        srvController.Refresh()
    End Sub

    ''' <summary>
    ''' ArretService.
    ''' </summary>
    ''' <remarks>Arrête le service "Service Extraction"</remarks>
    Private Sub ArretService()
        srvController.Stop()
        srvController.Refresh()
    End Sub
    ''' <summary>
    ''' btnArret_Click.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Au clic sur le bouton Arreter</remarks>
    Private Sub btnArret_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArret.Click
        Me.ArretService()
    End Sub
    ''' <summary>
    ''' btnDemarrer_Click.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Au clic sur le bouton Demarrer</remarks>
    Private Sub btnDemarrer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDemarrer.Click
        Me.DemarrerService()
    End Sub
    ''' <summary>
    ''' FormServiceConfiguration_Load.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Au chargement de la form</remarks>
    Private Sub FormServiceConfiguration_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.LireSettings()
    End Sub

    Private Sub LireSettings()

        Try
            documentXML.Load(CHEMIN)

            For Each Me.node In documentXML.Item("SettingsFile").Item("Settings")
                If Me.node.Name = "Setting" Then
                    'Assigne le contenu de la node ayant pour attribut name "nomReseau" à la textbox
                    If Me.node.Attributes.GetNamedItem("Name").Value = "nomReseau" Then
                        If Me.node.LastChild.Name = "Value" Then
                            txtNomReseau.Text = Me.node.LastChild.InnerText
                        End If
                    End If
                    'Assigne le contenu de la node ayant pour attribut name "nomPartage" à la textbox
                    If Me.node.Attributes.GetNamedItem("Name").Value = "nomPartage" Then
                        If Me.node.LastChild.Name = "Value" Then
                            txtPartageReseau.Text = Me.node.LastChild.InnerText
                        End If
                    End If
                End If
            Next Me.node

        Catch ex As XmlException
            MessageBox.Show(ex.Message, "Problème XML", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Problème", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub EcrireSettings()

        Try
            documentXML.Load(CHEMIN)

            For Each Me.node In documentXML.Item("SettingsFile").Item("Settings")
                If Me.node.Name = "Setting" Then
                    If Me.node.Attributes.GetNamedItem("Name").Value = "nomReseau" Then
                        If Me.node.LastChild.Name = "Value" Then
                            Me.node.LastChild.InnerText = txtNomReseau.Text
                        End If
                    End If
                    'Assigne le contenu de la node ayant pour attribut name "nomPartage" à la textbox
                    If Me.node.Attributes.GetNamedItem("Name").Value = "nomPartage" Then
                        If Me.node.LastChild.Name = "Value" Then
                            Me.node.LastChild.InnerText = txtPartageReseau.Text
                        End If
                    End If
                End If
            Next Me.node

            documentXML.Save(CHEMIN)

        Catch ex As XmlException
            MessageBox.Show(ex.Message, "Problème XML", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Problème", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub txtPartageReseau_Validating(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNomReseau.Leave
        Me.EcrireSettings()
    End Sub

    Private Sub txtNomReseau_Validating(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNomReseau.TextChanged
        Me.EcrireSettings()
    End Sub
   
End Class

Conclusion :


Deux méthodes :

LireSettings permettant d'assigner le contenu de <Value></Value> correspondant à l'attribut name voulu dans une textbox.

EcrireSettings permettant d'assigner le contenu d'une textbox dans le <Value></Value> défini par l'attribut name dans votre code.

Sont fournis dans le source : le code designer et le code .NET.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
en .NET c'est un poil plus complexe:
il faut tenir compte du namespace, définit dans le documentElement

Dim xmlDocument As New Xml.XmlDocument
Dim xmlNode As Xml.XmlNode

xmlDocument.Load("c:\a.xml")
Dim xmlNS As New Xml.XmlNamespaceManager(xmlDocument.NameTable)
xmlNS.AddNamespace("a", "http://schemas.microsoft.com/VisualStudio/2004/01/settings")

xmlNode = xmlDocument.DocumentElement.SelectSingleNode("a:Settings/a:Setting[@Name='nomReseau']/a:Value", xmlNS)

If Not Nothing Is xmlNode Then
MessageBox.Show("ancienne valeur: " & xmlNode.InnerText)
xmlNode.InnerText = "ma nouvelle valeur"

xmlDocument.save("c:\b.xml")
End If
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
en VB6:
Dim xmlDocument As New DOMDocument
Dim xmlNode As IXMLDOMNode
xmlDocument.Load "c:\a.xml"
Set xmlNode = xmlDocument.selectSingleNode("//SettingsFile/Settings/Setting[@Name='nomReseau']/Value")
If Not Nothing Is xmlNode Then
MsgBox "ancienne valeur: " & xmlNode.Text
xmlNode.Text = "nouvelle valeur"

xmlDocument.save "c:\b.xml"
End If

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.