Vb.net paramètre sauvegarde de valeurs

cs_question911 Messages postés 37 Date d'inscription mercredi 4 mai 2011 Statut Membre Dernière intervention 7 juin 2011 - 4 mai 2011 à 22:53
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 - 6 mai 2011 à 10:37
Bonjour,
À l'ouverture de mon petit programme il demande un numéro de série qui est 333.
Dès que la personne à tapé se numéro de série une page s'ouvre etc...
et le numéro de série deviens 444 et même si la personne ferme le programme et l'ouvre de nouveau le "serial" est toujours 444, Tout est parfait.
LE problème c'est que dans un dossier x le programme va fonctionné comme je viens de l'expliquer, mais dès que je change mon programme de dossier le numéro de série redeviens 333 et non 444.
Voici mon code.
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If valide() Then
            If Me.TextBox1.Text = My.Settings.pw Then
                My.Settings.pw = 444
                My.Settings.Save()
                Form2.Show()
            Else
                IsNothing(Nothing)
            End If
        End If

    End Sub
    Function valide() As Boolean
        Dim un As Boolean = True
        If Me.TextBox1.Text Is Nothing Or Not IsNumeric(Me.TextBox1.Text) Then
            un = False
        End If
        Return un
    End Function
    Private Sub Form_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosed
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        My.Settings.Reload()
    End Sub
End Class


My.setting à la valeur 333 par défaut.

12 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
5 mai 2011 à 10:58
Bonjour,

Les paramètres d'application sont stockés par défaut dans le fichier "MonAppli.exe.config" qui doit être dans le même dossier que l'exécutable.

Si vous déplacez l'exécutable sans le fichier de configuration, l'appli va créer un fichier de configuration dans le dossier de l'utilisateur quelque part dans "C:\Documents and Settings\[Utilisateur]\Local Settings" avec un nom de dossier générique en repartant des valeurs par défaut.

Pour détecter ce genre de problème, vous pouvez faire ceci:
Dans le menu Projet -> Propriétés de [MonProjet] onglet "Paramètres".

Sélectionnez le paramètre "pw" dans la liste.

Dans la grille des propriétés donnez à "GenerateDefaultValueInCode" la valeur "False".

De cette manière, si l'appli est lancé sans son fichier de configuration, le paramètre "pw" aura la valeur 0 à la place de sa valeur par défaut. Vous pouvez donc détecter qu'il y a un problème et générer une erreur.
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
5 mai 2011 à 11:05
Petite précision. Le fichier de configuration créé dans le dossier utilisateur et propre à chaque emplacement d'exécution de l'application.

Donc meme avec ma technique, si vous refaite un test depuis un dossier dans lequel l'appli a déjà été lancée, il rechargera les paramètres crées pour ce dossier, donc "pw" n'aura pas la valeur 0.

Pour bien faire il faudrait supprimer les fichiers de configuration déjà créé. La technique la plus simple pour les trouver est de faire une recherche de "MonApplication*" dans le dossier utilisateur (ou MonApplication est le nom de l'exécutable).
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
5 mai 2011 à 14:06
Bonjour,
Tout d'abord mettre ceci à la fermeture:

  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
              My.Settings.Save()
    End Sub


Sinon enregistrer le numero dans un fichier texte placé dans le dossier Debug de l'application. Voir exemple ici:

http://www.vbfrance.com/codes/MEMORISER_VALEUR_51785.aspx

@+ Le Pivert
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
5 mai 2011 à 14:41
Arf, j'ai mélangé paramètre utilisateur et paramètre application.

Je corrige donc mes dires.

Seul les paramètres d'application sont stockés dans le fichier MonApplication.exe.config.

Les paramètres utilisateur sont toujours stockés dans le dossier utilisateur et donc toujours dépendant du dossier dans lequel est exécuté l'application.

Donc dans votre cas, il vaut mieux les stocker ailleur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_question911 Messages postés 37 Date d'inscription mercredi 4 mai 2011 Statut Membre Dernière intervention 7 juin 2011
5 mai 2011 à 22:35
Merci des explications,
Mais, est-ce que vous auriez un moyen de régler mon problème...
est-ce que je peux changer la valeur du paramètre pw avec une ligne de code dans form1 ?
0
cs_question911 Messages postés 37 Date d'inscription mercredi 4 mai 2011 Statut Membre Dernière intervention 7 juin 2011
6 mai 2011 à 05:21
Bon, la solution de pivert fonctionne mais, quand je veux créer mon fichier texte dans un autre endroit que le dossier avec l'executable cela ne fonctionne pas.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
6 mai 2011 à 06:53
C'est normal puisque le chemin du fichier est le même que l'exécutable. Il y a une autre solution enregistrer dans la base du registre:
VB and VBA Programm Settings
Voici le code
Private Const APP_Text As String = "SaveRestoreTextBox"
    Private Const SECTION_Text As String = "pw"
   Affiche le texte à l'ouverture     
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
               TextBox1.Text = GetSetting(APP_Text, SECTION_Text, "pw" & ToString())
         End Sub

  'Enregistre à la fermeture.
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        SaveSetting(APP_Text, SECTION_Text, "pw" & ToString(), TextBox1.Text.ToString())
    End Sub




Le Pivert
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
6 mai 2011 à 07:56
J'ai oublié d'enlever les données existantes, sinon cela se rajoute:

 Private Const APP_Text As String = "SaveRestoreTextBox"
    Private Const SECTION_Text As String = "pw"
    'afficher les données
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = GetSetting(APP_Text, SECTION_Text, "pw" & ToString())
    End Sub
    'Sauvegarder les données
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        'Enlevez les données existantes.
        On Error Resume Next
        DeleteSetting(APP_Text)
        SaveSetting(APP_Text, SECTION_Text, "pw" & ToString(), TextBox1.Text.ToString())
    End Sub




Le Pivert
0
cs_question911 Messages postés 37 Date d'inscription mercredi 4 mai 2011 Statut Membre Dernière intervention 7 juin 2011
6 mai 2011 à 09:46
Merci,
J'ai pris ta première solution et je fais juste un move fichier.txt vers l'endroit où je veux est cela fonctionne bien.

Pourquoi avoir ajouté les paramètres si dès qu'on change l'application de fichier la/les valeur "reset".
0
cs_question911 Messages postés 37 Date d'inscription mercredi 4 mai 2011 Statut Membre Dernière intervention 7 juin 2011
6 mai 2011 à 09:47
Dès qu'on change l'application de dossiers *
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
6 mai 2011 à 10:16
Les paramètres utilisateur sont plutot utilisés pour stoquer des choses simples du style préférence d'affichage des menus ou couleurs d'interface pour chaque utilisateur.

Si l'on regarde de plus prêt le dossier créé pour l'utilsateur on remarque qu'il a un nom générique créé à partir du nom de l'application de son emplacement et, il me semble, de son GUID ceci afin de garantir son unicité.

S'il on veut stocker des paramètres globaux pour tous les utilisateurs (qui donc ne changeront pas en fonction de l'emplacement) il faut leur donner la portée "Application".

Dans tous les cas, le but des paramètres d'application n'est surtout pas de stocker des données sensibles (clé d'activation, mot de passe ..) car les fichiers sont de simples XML facilement accessibles (même cryptés).

Au final, je dirai qu'une application multi-utilisateur étant rarement amenée à être déplacée, le problème ne se pose pas vraiment.
Si l'application est portable, il faut dans tous les cas faire sa propre gestion.
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
6 mai 2011 à 10:37
D'ailleur j'ajoute une petite précision (que j'aurai du faire tout de suite désolé).

Si votre exécutable est signé à l'aide d'une clé de nom fort (Menu Projet -> Propriété de [MonProjet] onglet Signature) le nom générique du dossier créé pour l'utilisateur se fera par combinaison du nom de l'application et de son nom fort.

Donc dans ce cas, les paramètres utilisateurs sont les mêmes, peut importe l'emplacement d'exécution. Car cette fois c'est le nom fort qui garanti l'unicité.
0
Rejoignez-nous