05/01/2013, 23h32
|
#23
|
|
Membre émérite
 Hervé Inscription : janvier 2007 Messages : 591 Détails du profil  Informations personnelles : Nom : Hervé Localisation : France Informations forums :
Inscription : janvier 2007 Messages : 591 Points : 958 Points : 958
|
Citation:
Envoyé par kokonaru
Merci mais j'ai pas bien compris la méthode que tu a utilisé mais elle marche parfaitement. ...
|
J'ai placé quelques commentaires.
Pour la sauvegarde
Code :
1 2 3 4
| Private Sub btnEnregistre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnregistre.Click
dicoTextBox.Clear()
' appel à la procédure qui ajoutera les noms et les valeurs des textbox dans le dictionnaire
NoteTextBox(Me, dicoTextBox) ' le paramètre Me indique ici la Form (le paramètre conteneur de la procédure NoteTextBox recevra donc la Form) |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ''' <summary>Stoque toutes les données des textBox (Name,Text) dans un dictionnaire.</summary>
''' <param name="conteneur">un conteneur de textbox (form, panel, groupbox)</param>
''' <param name="UnDico">le dictionnaire contenant => clé : "nom textbox", valeur : "texte du textbox".</param>
''' <remarks>Procédure récursive sur les groupbox et panel.</remarks>
Sub NoteTextBox(ByVal conteneur As Control, ByRef UnDico As Dictionary(Of String, String))
For Each ctrl As Control In conteneur.Controls
'select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de controle
Select Case True
Case TypeOf ctrl Is TextBox ' dans le cas ou le controle est un TextBox, la condition sera vrai
UnDico.Add(ctrl.Name, ctrl.Text) ' on ajoute le nom et le texte du TextBox dans le dictionnaire
Case TypeOf ctrl Is GroupBox ' dans le cas ou le controle est un GroupBox, la condition sera vrai
' appel à la procédure qui ajoutera les noms et les valeurs des textbox dans le dictionnaire (appel récursif)
NoteTextBox(ctrl, UnDico) ' ici le paramètre ctrl est un GroupBox (le paramètre conteneur de la procédure NoteTextBox recevra donc un GroupBox)
Case TypeOf ctrl Is Panel
NoteTextBox(ctrl, UnDico)
End Select
Next
End Sub |
Code :
1 2 3 4 5 6 7 8 9
| Sub SaveDico(ByVal UnDico As Dictionary(Of String, String))
'...
Dim ecrire As New System.IO.StreamWriter(savefile.FileName)
' Nous parcourons chaque éléments du dictionnaire que nous récupérons sous forme d'un ensemble clé, valeur.
For Each element As KeyValuePair(Of String, String) In UnDico
' la clé s'inscrit en lieu et place de {0}, et le texte en {1}. ce qui donnera une chaine du genre "TextBox1|Toto". Chaine écrite dans le fichier
ecrire.WriteLine("{0}|{1}", element.Key, element.Value)
Next element
'... |
Pour la lecture
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13
| ''' <summary>Lecture du fichier de config, création et alimentation d'un dictionnaire avec le contenu du fichier.</summary>
''' <returns>renvoie un dictionnaire (Nom TextBox, Texte) rempli avec les valeurs à donner aux TextBox</returns>
Function loadDico() As Dictionary(Of String, String)
'...
UneLigne = srFichier.ReadLine
While Not UneLigne Is Nothing
'split permet de morceler une chaine suivant un caractère.
'Pour éviter d'utiliser un tableau, je procéde ainsi
'UneLigne.Split("|")(0) permet de récupérer le 1er élément (la clé: le nom du TextBox)
'et UneLigne.Split("|")(1) permet de récupérer le 2éme (la valeur: le texte du TextBox)
UnDico.Add(UneLigne.Split("|")(0), UneLigne.Split("|")(1))
UneLigne = srFichier.ReadLine
End While |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ''' <summary>Répartie les valeurs du dictionnaire dans les TexBox appropriés. (TextBox identifié par son nom)</summary>
''' <param name="conteneur">un conteneur de textbox (form, panel, groupbox)</param>
''' <param name="UnDico">le dictionnaire contenant => clé : "nom textbox", valeur : "texte du textbox". (Reçu par référence)</param>
''' <remarks>Procédure récursive sur les groupbox et panel.</remarks>
Sub AffTextBox(ByVal conteneur As Control, ByRef UnDico As Dictionary(Of String, String))
Try
For Each ctrl As Control In conteneur.Controls 'parcour de la collection des contrôles du conteneur
Select Case True 'select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de contrôle
Case TypeOf ctrl Is TextBox
' chaque ligne du dictionnaire étant constitué d'une clé et d'une valeur
' avec la clé (le nom du TextBox traité (ctrl.Name)) on récupére la valeur (le texte) dans le dictionnaire que l'on affiche dans le TextBox.
ctrl.Text = UnDico(ctrl.Name)
Case TypeOf ctrl Is GroupBox
' un GroupBox => appel récursif pour traiter les TextBox
AffTextBox(ctrl, UnDico)
Case TypeOf ctrl Is Panel
AffTextBox(ctrl, UnDico)
End Select
Next |
La procédure "EffaceTextBox" est sur le même principe que les autres procédures récursives.
Si quelque chose t'échappe n'hésite pas à demander.
A+, Hervé.
|
|
00
|