Comment enregister le status de checkbox dans 1 Windows Form

Signaler
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013
-
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
-
Bonjour à vous,

Je me suis lancé dans le dev d'un petit programme pour de la famille mais étant qu'un débutant dans le domaine je bloque un peu ... j'aurais besoin de vos lumières :)

Je vais essayer d'expliquer au mieux son fonctionnement pour que vous puissiez m'aider mais si il vous faut plus d'info hésitez pas à demander (c'est pas toujours facile d'expliquer clairement ^^)

En gros, le programme se présente sous la forme d'un formulaire contenant plusieurs checkbox, un peu comme un QCM (C'est en quelques sorte un prog de suivis scolaire pour suivre l'évolution du niveau de l'utilisateur) :

- chaque lignes possèdent un label avec la question puis plusieurs checkbox à cocher (par contre, on pourra cocher plusieurs cases contrairement à un QCM).
- Il y a plusieurs formulaires (un par matière) qui contiennent tous des cases à cocher
- Il y a aussi plusieurs utilisateurs (cette partie fonctionne: base utilisateur, connexion/déconnexion au programme, conservation de l'id de l'utilisateur de connecté sur chaque formulaire)


L'utilisateur doit donc pouvoir sauvegarder sont évolution et ainsi pouvoir relancer le logiciel en ayant ses cases à nouveau cochées.
Je cherche donc le moyen d'enregistrer le statu de toutes cases se trouvant dans le formulaire d'ouvert (donc pour une matière précise) en fonction de l'utilisateur qui est connecté.

J'avais trouvé exemple de code pour passer en revue toutes les checkbox mais je sais pas trop si ca peut m'être utile pour mon code (et a ce moment là quelle modif faut-il faire ?) ou si il y a un autre moyen. Voici le code en question :

       For Each C As CheckBox In Me.Controls.OfType(Of CheckBox)()
                If C.Checked Then
                Select Case C.Name
                    Case "Check_B_Lundi"
                        'Requête SQL Lundi...
                    Case "Check_B_Mardi"
                        'Requête SQL Mardi...
                    Case ...
                End Select
            End If
        Next



Merci par avance pour votre aide.

14 réponses

Messages postés
27
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
16 février 2011

Bonjour,

a mon avis le plus simple :

ce que tu peux faire c'est créer une feuille excel par utilisateur avec une colonne par matière.

puis sur tes userforms mettre un bouton genre "sauvegarder et revenir plus tard" qui irais mettre dans la feuille de l'utilisateur actif dans la colonne de la matiere en cours, les valeurs des checkbox lignes par lignes.

puis tu rajouteras dans la procédure d'ouvertute des userform des question une condition pour que s'il y a eu une sauvegarde ,donner le choix à l'utilisateur soit de recommencer à zéro soit de charger sa sauvegarde.
lors du chargement de sauvegarde parcour les lignes de la matière concernée et affecte le contenue à la checkbox qui doit y faire référence.

N'oubli pas de prévoir lorsque l'utilisateur à terminer un questionnaire complet d'effaccer la sauvegarde de la matière.

en procédant ainsi chaque utilisateur pourra avoir une sauvegarde par matière.

en esperant de donner des elements de réponse
Nicolas
Développeur en herbes
mais l'herbe pousse tranquilement
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

Salut,
merci bien pour la réponse, je cherche bien a faire a peu prêt dans ce genre.
Je ne sais pas si ca change beaucoup mais je tiens à préciser que j'utilise Visual Studio 2010 (plusieurs exemples de code que j'ai trouvé sur le net mais qui avaient d'anciennes syntaxes ...).
Je n'utilise pour le moment pas de fichier extérieur pour ma base, elle est gérer et créer en local avec Visual Studio

Sinon pour la sauvegarde j'avais, à l'origine, préparé une base permettant d'enregistrer les valeurs des cases mais ca allais me faire une base énorme.

Je voulais donc me tourner vers une sauvegarde dans un fichier texte ou autre (mais trop lisible pour l'utilisateur final de pref ..).
Mais bon problème reste le même ... comment passer en revu toutes les checkbox, récupérer leurs statuts et marquer tout ça dans un fichier portant le nom de l'utilisateur et comme tu l'a dit que lorsqu'il se reconnecte il recharge la sauvegarde.

Mais je cherche toujours comment faire.
Doit-je passer par une boucle "For Each ..." comme dans le code du dessus pour recup le statuts ou y a t-il un autre moyen ?
Messages postés
27
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
16 février 2011

Bonjour,

Ne connaisant pas visual studio je ne pourrais te donner du code en revanche sur la logique de procéder je peut essayer, à toi apres de retranscrire dans ton languages.
le for each est peut etre le meilleur moyen .

pour la sauvegarde tu peut aussi creer un fichier excel que tu m'est dans un emplacement définis par exemple dans le dossier "program files" avec un sous dossier pour ton appli ( les personnes n'iront pas forcément voir par la) et mettre le fichier en fichier caché.

puis lorsque tu fait appel a ce fichier tu l'ouvre dans une autre session excel que tu cache ( rend invisible) cela sera donc transparent pour l'utilisateur

Nicolas
Développeur en herbes
mais l'herbe pousse tranquilement
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Bonjour,
Si tes contrôles sont sur un Form VB2010, tu peux utiliser la propriété du contrôle Application Settings.
Tout se fait automatiquement :
L'enrgistrement de la position du contrôle à la fermeture de l'application.Et à l'ouverture tu le retrouves dans la position que tu l'as laissé.
Voici 2 sources sur ce site:

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

http://www.vbfrance.com/tutoriaux/SAVE-SETTINGS-SANS-CODE-AVEC-VB2008_1127.aspx


@+ Le Pivert
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

Bien vu Nyko pour le coup du fichier caché ça pourra être bien utile.
Et un grand merci a toi aussi Le Pivert, très bon lien !! Je peut voir comme ça comment créer et ouvrir un fichier et comment recup les statuts de mes checkbox. :D

Par contre, étant donné que j'ai à peu près 40+ checkbox par form doit-je faire une ligne de code pour chaque checkbox du type :
monStreamWriter.WriteLine(CheckBox1.Checked.ToString)
monStreamWriter.WriteLine(CheckBox2.Checked.ToString)
....
Je vais en tout cas déjà test avec 1 seule ligne pour commencer.

Quoi que je viens de test ton 2eme lien et ca m'a l'air pas mal du tout non plus étant donné que ca garde bien le statuts de la case cochées (même si je relance le programme). Par contre y-aurait-il un moyen d'ajouter un autre paramètre pour qu'il retienne aussi l'utilisateur de connecté ? (le nom du user est stocké dans un label dans un coin de la Form)
Pour le moment j'ai juste renseigné comme paramètre le champ Ckeckstate mais j'ai vu qu'il y a un paramètre "Scope" avec comme valeur de base serais-ce ceci pour lui faire différencier la session ouverte ?
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Non ne te sers pas du fichier texte, mais plutôt de la propriété Application Settings des contôles. Regarde dans mon programme dans Le Form1 comment sont enregistrés les contrôles, ne t'occupes pas du Form2. Tu vas dans la propriété Application Settings de chaque contrôle et tu l'ouvre et tu choisis le texte pour les labels en spécifiant le label correspondant et la position du checkBox à False en précisant le nom du checkBox. Ensuite tu vas dans My Project et dans Paramètres et là tu verras tes contrôles enregistrés.Tu peux faire des corrections si cela est nécessaire.
Pour ce qui est des Label c'est la même chose en choisissant Texte pour la mémorisation.
L'explication et longue et laborieuse mais dans l'action c'et très rapide
Bon courage


Le Pivert
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

Merci beaucoup pour cette explication et rapide en plus :D ,ça avance, ça avance !!

Je me retrouve donc avec le code dans "Settings.settings" pour chaque checkbox (enfin juste qq1 pour les test ^^)

<Setting Name="Stat_cas_A1" Type="System.Windows.Forms.CheckState" Scope="User">
<Value Profile="(Default)">Unchecked</Value>
<Setting Name="Stat_cas_A2" Type="System.Windows.Forms.CheckState" Scope="User">
<Value Profile="(Default)">Unchecked</Value>
....
et ce que j'ai mis pour mon label contenant l'id de l'utilisateur :
<Setting Name="UserConnect" Type="System.String" Scope="User">
<Value Profile="(Default)" />


Est-ce un de ces paramètres la que je pourrai modifier pour enregistrer en fonction de l'utilisateur ? Car pour le moment même en fermant/ouvrant l'appli je garde toujours les cases de cochées.

J'ai vu aussi en me baladant dans "My Project" qu'il y avait l'option "Mode d'authentification", j'avais jusqu'à maintenant <Windows> de choisi mais j'utilise un système de connexion et de création d'utilisateur propre à mon appli j'ai donc changé l'option.
Peu-être que ca peut me permettre de débloquer d'autres paramètres ... en tout cas mon appli marche toujours mais il doit y avoir un endroit où renseigner plus précisément mon moyen d'authentification pour qu'il le prenne en compte ...

en tout cas merci encore !!
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Il faut aller dans My Project, Paramètres et tu dois voir:
Nom Type Portée Valeur
CheckBox Boolean Utilisateur False
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

Avec Checkbox diffèrent pour chaque checkbox ? parce que sinon si je coche 1 case elles se cochent toutes :/
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Avec le nom de tout les CkeckBox
___ Nom____Type______Portée___Valeur
CkeckBox1 Boolean Utilisateur False
CkeckBox2 Boolean Utilisateur False
CkeckBox3 Boolean Utilisateur False
CkeckBox4 Boolean Utilisateur False
etc..

Pour les Labels
Label1 String Utilisateur Ton Texte
Label2 String Utilisateur Ton Texte
Label3 String Utilisateur Ton Texte
etc..
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

Arf dommage qu'on puisse pas éditer ses messages j'aurai pu éviter de faire un doublon ^^

Mais donc j'ai maintenant comme paramètre :

    <Setting Name="Stat_cas_A1" Type="System.Boolean" Scope="User">
      <Value Profile="(Default)">False</Value>
    <Setting Name="Stat_cas_A2" Type="System.Boolean" Scope="User">
      <Value Profile="(Default)">False</Value>



mais ça ne change en rien le résultat comparé à quand j'avais :

    <Setting Name="Stat_cas_A1" Type="System.Windows.Forms.CheckState" Scope="User">
      <Value Profile="(Default)">Unchecked</Value> 
    <Setting Name="Stat_cas_A2" Type="System.Windows.Forms.CheckState" Scope="User">
      <Value Profile="(Default)">Unchecked</Value> 


Sauf qu'au lieu que ça soit le paramètre <CheckState> qui soit renseigné c'est <Checked> (quand on regarde dans les propriétés de la Checkbox).
Ça me parait un peu pareil, mais vu que je connais pas trop y'a surement une différence donc je vais bien laisser comme tu m'a dit.

Bon par contre je me rend compte que du coup c'est plus un renseignement qu'il me faudrait (vu mon niveau et pas trop envi de tout faire planter en faisant des test de mon coté ;D) mais limite le code ou la source d'un exemple. Je vais donc essayer de pas trop en demander non plus, va bien falloir que je pige le fonctionnement au bout d'un moment ^^
Donc si ca deviens trop complexe à expliquer ou autres y'a pas de soucis, tu m'a déjà bien sur une très bonne piste (comparé à ce que j'essayai de faire à l'origine).

Mais bon, il me reste plus qu'a faire sauvegarder et charger cet enregistrement en fonction de l'utilisateur qui est connecter. Donc si je me trompe pas, réussir à faire sauvegarder les cases dans une sauvegarde où bidule est la personne de connectée (il doit bien y avoir un moyen de dire que le nom de la sauvegarde est le contenu d'une variable ou d'un label). Puis, une fois que bidule se reconnecte, ça charge la sauvegarde .
J'y suis presque au bout !! .... de l'étape sauvegarde de mon prog

ps: je sais pas si le bouton "Réponse acceptée!" met fin au post (dans le doute je touche pas ^^) parce que j'aurais bien cliqué à chaque fois dessus, vu que mon prog avance à chaque fois
Messages postés
14
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
7 juin 2013

ah j'avais pas que tu avais répondu entre temps ^^

pour le label j'en ai qu'un seul par Form (mais y'a 9 Form) et le texte y est pas saisi manuellement (enfin pas directement, il est récupéré dans le champ texte lorsque l'utilisateur se connecte puis copié dans les labels de chaque Form, jusqu'à ce que l'utilisateur se déconnecte où la, tous les labels sont purgés).

Quelle syntaxe je toit utiliser dans la colonne Valeur du paramètre ?
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Pour le Label tu ne mets rien si il n'y a pas de texte.
Pour les checkBox je te conseille de faire un essai avec une nouvelle application. Tu prends mon programme "Memoriser valeurs" tu fais un copier coller du checkBox du Form1 sur le Form1 de ton application "Essai" ensuite tu vas dans Les Propriétés de ce controle dans Application Settings qui est en premier sur VB2008. Tu déroules tu verras checked tu ouvres et tu cliques sur nouveau. Tu remplis Name avec le nom de ton checkBox en l'occurence CheckBox1. C'est tout tu ne touches à rien .Tu debogues, tu coches ton check et tu fermes.L'état de ton check est enregistré. Etudie mon programme tu verras comment cela fonctionne.

Le Pivert
Messages postés
6824
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 juillet 2020
109
Je viens de lire ton dernier message. Si tes Labels sont purgés tu n'aura rien, car Application Settings enrgistre l'état des contrôles à la fermeture.