ben_singhi
Messages postés23Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention14 janvier 2007
-
11 janv. 2007 à 22:31
ben_singhi
Messages postés23Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention14 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.
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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é...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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é !