Sauver l'état d'une chekBox

ben_singhi Messages postés 23 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 14 janvier 2007 - 11 janv. 2007 à 22:31
ben_singhi Messages postés 23 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 14 janvier 2007 - 12 janv. 2007 à 17:12
Bonsoir à tous, qui pourrait me dire la procédure pour enregisté dans un fichier ( Text ), l'état d'une chekBox ( true - false ) 

Situation: Avant de fermer le soft, on a été dans les options, cocher des cases, et lorsqu'on ouvre de nouveau le soft, les cases doivent toujours être cochées. Pour qu'il y ait ainsi certain truc qui se font lors du lancement du soft.

Merci de vos réponse, et bonne soirée.

9 réponses

le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
11 janv. 2007 à 22:43
Lu
regarde du coté du fichier ini, tu trouves des exemples,avant la fermeture de ton programme,tu fais appel à une fonction qui sauvegarde l'etat de tes options et au démarrage du programme tu fais appel à une fonction qui charge l'etat de tes checkbox

Form_Unload 
   call SauvegardeOption
end sub

Form_Load
   call chargeOption
end sub 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 janv. 2007 à 00:45
Ou tu peux utiliser la base de registre.
Voir l'aide pour GetSettings et SaveSettings

Si tu veux utiliser un fichier texte, il faudrait penser à mettre le nom du contrôle puis sa valeur à côté

Le fichier INI demeure une troisième possibilité.

MPi
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 08:15
Ouille !

La difficulté sera de retrouver le contrôle concerné  à partir de son nom en chaîne de caractères, sans faire une boucle sur tous les contrôles pour retrouver celui qui porte ce nom ....

2 solutions :

- La première et la plus simple (pour des contrôles de même type et à condition que l'on ne doive sauvegarder que les valeirs de ces contrôles) : un groupe de controles dont on sauvegarde les index concernés

- La deuxième, plus lourde au départ mais beaucoup plus flexible et permettant de traiter dans le même fichier des contrôles "disparates" :
 - créer au départ de son application, de façon dynamique, un tableau de contrôles
- dans le fichier texte (ou autre) : sauvegarder non pas le nom du contrôle mais son index dans le tableau
    imaginons par exemple que l'on ait ainsi sauvegardé le chiffre 2 correspondant au contrôle controletiti

- à la réouverture : lecture du fichier ===>> 2 . Le contrôle concerné sera le contrôle tableau(2), donc controletiti

Embrouillé ?
Si oui, il n'y a qu'à dire et je fais une petite démo
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 11:48
Pas de réactions ????

Bon, ça ne fait rien...

Voilà comment je travaille, en ce qui me concerne :

Une form avec :


- un bouton de commande Command1 (propriété caption = "sauvegarder")


3 textboxes Text1, Text2 et Text3


2 Checkboxes Chek1 et Check2


2 OptionButtons Option1 et Option2


Code :


Private sauve() As Control
Const ficsauve = "c:\preuve.txt"  ' je donne une fois pour toute le chemin de cette sauvegarde


Private Sub Form_Activate()
   decidesauve
   restaure
End Sub


Private Sub Command1_Click()
   Open ficsauve For Output As #1
    For i = 0 To UBound(sauve)
       Select Case TypeName(sauve(i))
         Case Is = "TextBox"
           quoi = sauve(i).Text
         Case Is = "CheckBox"
           quoi = sauve(i).Value
         Case Is = "OptionButton"
           quoi = sauve(i).Value
       End Select
       Print #1, i & "@" & quoi
    Next i
  Close #1
End Sub


Private Sub decidesauve()
   'voilà ! c'est ici que l'o décide de ce qui va être sauvegardé
   'j'ai ici choisi Text1, Text3, Check1, Check2, Option1 et Option2 - je fais exprés de ne pas
   'sauvegarder Text25(pour exemple)
   ReDim sauve(5) As Control ' à 5, donc, pour mes 6 contrôles
   Set sauve(0) = text1
   Set sauve(1) = text3
   Set sauve(2) = Check1
   Set sauve(3) = Check2
   Set sauve(4) = Option1
   Set sauve(5) = Option2
End Sub




Private Sub restaure()
  If Dir(ficsauve) = "" Then Exit Sub ''juste pour éviter une erreur la toute 1ère fois (fichier absent)
  Open ficsauve For Input As #1
  While Not EOF(1)
    Line Input #1, a
    ou = Val(Mid(a, 1, InStr(a, "@") - 1))
    quoi = Mid(a, InStr(a, "@") + 1)
    Select Case TypeName(sauve(Val(Mid(a, 1, InStr(a, "@") - 1))))
      Case Is = "TextBox"
         sauve(ou) = quoi
      Case Is = "CheckBox"
         sauve(ou) = Val(quoi)
      Case Is = "OptionButton"
         sauve(ou) = quoi
    End Select
  Wend
  Close #1
End Sub

Lancer - modifier partout ou l'on veut... fermer l'appli...
Relancer et regarder !...

Note : j'ai fait exprès de ne pas sauvegarder Text2 (pour bien montrer que l'on ne "sauve" ainsi que ce que l'on veut...

Bon... je suis cinglé...


 
0

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

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
12 janv. 2007 à 11:57
Salut,
Ben le petit code de Jmfmarques va m'être utile...cela donne des idées nouvelles..
A+
Exploreur


 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 janv. 2007 à 12:03
Personnellement, j'opterais pour la base de registre, mais si l'utilisation d'un fichier est nécessaire, on pourrait y aller de cette façon. Il faut, par contre, donner des noms "Standards" aux contrôles. Ici, j'utilise des textbox se nommant "Text1", "Text2", ...

Si tu utilises txtNom, txtNombre, il faudra changer la chaîne de recherche
If InStr(1, Tablo(0), "Text") > 0 Then
pour If InStr(1, Tablo(0), "Txt") > 0 Then
De là l'importance d'uniformiser la nomenclature pour éviter trop de IF

L'important, c'est de savoir à quel type de contrôle on veut donner une valeur pour utiliser la bonne commande: .Text, .Caption, .Value, .....

Comme j'ai écrit ce code en quelques minutes, il n'est certainement pas optimisé...

Option Explicit

Private Sub Form_Load()
    Dim strTemp As String
    Dim Tablo() As String
   
'Si le fichier existe
    If Dir(App.Path & "\Contrôles.txt", vbArchive) <> "" Then
        Open App.Path & "\Contrôles.txt" For Input As #1
            Do Until EOF(1)
                'Lecture d'une ligne du fichier
                Line Input #1, strTemp
                'qu'on sépare en 2 parties, le nom et la valeur du contrôle
                Tablo = Split(strTemp, ";")
                'Si le nom du contrôle contient le mot "Text" (par défaut... Text1, Text2)
                If InStr(1, Tablo(0), "Text") > 0 Then
                    Me.Controls(Tablo(0)).Text = Tablo(1)
                End If
            Loop
        Close #1
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim Ctl As Control
   
    Open App.Path & "\Contrôles.txt" For Output As #1
        For Each Ctl In Me.Controls
            If TypeOf Ctl Is TextBox Then
                Print #1, Ctl.Name & ";" & Ctl.Text
            'else if typeof ctl is ...
                '...
            End If
        Next
    Close #1
End Sub

MPi
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 12:44
Ouille, MPI,

il n'est pas nécessaire de forcer, comme tu le fais là, les nomns de baptème, dès lors que TypeName te permet, précisément, de savoir quel type de contrôle est concerné !
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 janv. 2007 à 14:41
Salut,

utilise cette source de PCPT : http://www.vbfrance.com/codes/ENREGISTRER-APPLIQUER-PARAMETRES-FORM-LIGNES-CTL_35970.aspx

Elle est super simple d'utilisation (gérée par un fichier .ini)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
ben_singhi Messages postés 23 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 14 janvier 2007
12 janv. 2007 à 17:12
Merci pour votre aide à tous, ce que je voulais faire  fonctionne bien, encore un grand merci à vous tous
0
Rejoignez-nous