Lancement de Procédure

Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 - 31 août 2007 à 13:22
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 - 11 sept. 2007 à 07:52
Bonjour,

j'ai un Form avec plusieurs CheckBoxs et leur nombre peut augmenter (il n'y a que ça sur mon Form)  :
 
? j'aimerais créer une procédure pour que quand je clique sur un CheckBox, il y est une boucle sur tous les CheckBoxs. Pour la boucle pas de problème, mais c'est la procédure appelant cette boucle, qui est un soucis... j'ai essayé plusieurs  évènement comme Clique, Enable... mais ça concerne mon Form et pas mes CheckBoxs !

? de plus, j'aimerais qu'à interval régulier, le Texte de mes CheckBoxs soit sauvegardé dans un fichier *ini. Pareil pour le code de sauvegarde, pas de problème, mais pour la boucle de temps, (demande d'arrêt si Now>Debut + Intervale), mon Form ne reprend pas la main... j'aimerais donc savoir, si je m'y prends comme il faut et  dans quel évènement placer cette boucle ?

? enfin, dans mon fichier *.ini, j'aimerais pouvoir effacer des lignes complètes, j'ai essayé des codes trouvés sur le net, mais sans succès !

Merci de maider.... 

14 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 août 2007 à 23:15
Si tu es en VB2005, il faut que tu abonne l'évènement click de chaque CheckBox créé à une procédure d'évènement capable de répondre à l'évènement Click du checkbox.

Petit exemple :

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
MyBase.Load
        For i As Integer =  0 To 4
            ' Creation du checkbox
            Dim chk As New CheckBox
            chk.Name = "CheckBox n° " & i.ToString
            chk.Text = "Je suis le n°
" & i.ToString
            chk.Location = New Point(10, (i * chk.Height) + 5)
            chk.Parent = Me
            chk.Visible = True

            ' Abonnement de l'évènement Click du
checkbox
            AddHandler chk.Click, AddressOf
AllCheckBox_Click

        Next
    End Sub

 
    'Procédure de
gestion de l'évènement click de tous les checkbox abonnés
    Private Sub AllCheckBox_Click(ByVal sender As Object, ByVal e
As System.EventArgs)

        'Exemple de traietemnt
        Dim tmp_chk As CheckBox = CType(sender,
CheckBox)
        MessageBox.Show(String.Format("{0},
valeur : {1}", tmp_chk.Name, tmp_chk.CheckState.ToString))

    End Sub

End Class

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
2 sept. 2007 à 18:35
Merci casy pour le lancement de procédure pour mes CheckBoxs et as-tu une idée pour :
_mes sauvegardes à interval régulier
_l'effacement d'une ligne complète dans un fichier ini
Merci...
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
2 sept. 2007 à 18:37
up
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 sept. 2007 à 19:05
Sauvegardes à intervalles régulier, je dirais, pourquoi pas avec un Timer

Pour l'effacement d'une ligne dans un fichier ini, si tu utilise les fonctions de l'API Windows pour gerer ton fichier ini, il suffit d'ecrire une valeur Nothing.
Sinon il va falloir gerer ton fichier à la main, soit en recopiant ligne par ligne, soit en trouvant une astuce géniale pour pouvoir charger le fichier, aller supprimer une ligne, puis réenregistrer le fichier. Peut-etre une richtextbox, mais je sais pas si on peut supprimer simplement une ligne avec.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

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

Posez votre question
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
3 sept. 2007 à 07:25
Pour mon fichier ini, j'avais bien trouvé quelquechose en cherchant des aides sur les fichiers ini mais cela ne dit plus marcher sur VB 2005...

Et pour l'histoire du Timer à ton avis comment dois-je mis prendre car dans ma manip (demande d'arrêt si Now>Debut + Intervale) mon Form ne reprend pas la main... dois-je le mettre dans une procédure spécifique ?
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
8 sept. 2007 à 21:17
Désolé d'être un boulet, mais malheureusement étant débutant en VB (m'étant pourtant bien entrâiné en VBA), je n'arrive pas à intégrer ton code...
J'ai écrit :



Private Sub PlanCharge_Load(ByVal Sender As Object, ByVal e As System.EventArgs) Handles Me.Load (je crois correspondant à Form1_Load)
         For each CheckBoxN in Controls
                  Définitions des mes CheckBoxs
                  AddHandler CheckBoxN.Click, AddressOf QuandCheckBoxsChangent
         Next CheckBoxN
End Sub

 Private Sub QuandCheckBoxsChangent (ByVal CheckBoxN As Object, ByVal e As System.EventArgs)
         Dim CheckBoxZ As CheckBox = CType(CheckBoxN, CheckBox)

             If
CheckBoxZ.CheckState = CheckState.Checked then ...
End Sub

mais quand je démarre le débogage et que je clique sur mes CheckBoxs, rien ne se passe, quelqu'un peut-il m'aider ?
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ce n'est pas tout...
Ayant trouvé sur un autre Forum comment effacer une ligne complète dans mon fichier ini on me dit d'insérer un code dans Global.bas (pour que ... As Any soit supporté),
bien qu'ayant essayé plein de combinaisons impossible de l'insérer quelque part...
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Et enfin je ne sais toujours pas comment utiliser le Timer (petit rappel : j'ai une demande d'arrêt si Now>Debut + Intervale, mais mon Form ne reprend pas la main)...

Merci aux bonnes âmes charitables !




 
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
8 sept. 2007 à 21:43
Désolé pour la mise en page mais à chaque fois que j'écris j'ai du texte de toutes les tailles... encore un mystère !!!

A propos de mystère pourquoi de temps en temps, alors que je n'ai pas changé mon code, le débogage ne veut pas se lancer, il m'écrit :"il n'y a pas de code source disponible pour l'emplacement en cours." et il faut que j'intervertisse "Private" <-> "Public" pour que cela redémarre.... (et quand cela recommence j'intervertis à nouveau et ça refonctionne)
 ?
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
8 sept. 2007 à 23:15
Pour le Global.bas (sous VB2005) : j'ai fait "insérer..." et j'ai renommé "Global.bas" quelquechose qui n'avait rien à voir (aucun choix ne me proposait un *.bas) -> suis-je sur la bonne voix ?
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
9 sept. 2007 à 19:18
Encore du nouveau...

pour le Timer laisser tomber  ! (je viens seulement de découvrir qu'il fallait avec la "bôite à outils" rajouter l'icône "Timer" sur le visuel de mon Form et pas sur son code)

pour l'éffacement de ligne dans mon fichier ini : j'ai trouvé ceci qui explique qu'en définissant certaine variable avec "As Any", il était possible d'éffacer une ligne. Cependant dans l'aide de VB2005, il est précisé que la déclaration Any n'existe plus... comment faire pour intégrer le code du lien ci-dessus à VB2005 ?

et j'attends encore de l'aide pour mes procédures de CheckBox...

Merci...

Je fais énormément de recherches sur les forums et en tatonnant mais je ne trouve rien alors "si'ou plé" HELP ME !!!!
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 sept. 2007 à 21:58
Pour ton code pour les checkbox, il doit marcher.

Rajoute quand même un test comme ci dessous (en rouge), tous les controles contenus dans la collection Controls ne sont pas forcément des Checkboxs, il faut donc les filtrer :
Private Sub PlanCharge_Load(ByVal Sender As Object, ByVal e As System.EventArgs) Handles Me.Load (je crois correspondant à Form1_Load)
         For each CheckBoxN as Control in Controls
                  If TypeOf CheckBoxN is CheckBox then
                           Définitions des mes CheckBoxs
                           AddHandler CheckBoxN.Click, AddressOf QuandCheckBoxsChangent
                  End If
         Next CheckBoxN
End Sub

 Private Sub QuandCheckBoxsChangent (ByVal CheckBoxN As Object, ByVal e As System.EventArgs)
         Dim CheckBoxZ As CheckBox = CType(CheckBoxN, CheckBox)

             If
CheckBoxZ.CheckState = CheckState.Checked then ...
End Sub

Pour ce qui est de Global.bas, en fait dans VB2005, il te faut rajouter un module que tu vas nommer Global, le fichier correspondant s'appelera lui Global.vb. En VB2005, les extentions .frm (forms) et .bas (modules) n'existent plus. Elles sont remplacée par l'extention .vb aussi bien pour les forms que pour les modules.

Pour effacer une ligne dans le fichier ini, la déclaration de la fonction en VB2005 est un peu différente de celle donné sur la page de Microsoft qui est prévu pour VB6.
La déclaration pour VB2005 est la suivante :
 
Imports System.Runtime.InteropServices

Module Module1

    Public Declare Function WritePrivateProfileString Lib
"kernel32" Alias "WritePrivateProfileStringA" ( _
                                          ByVal lpApplicationName As String,
_
                                          <MarshalAs(UnmanagedType.AsAny)> ByVal lpKeyName As String,
_
                                          <MarshalAs(UnmanagedType.AsAny)> ByVal lpString As String,
_
                                          ByVal
lpFileName As
String) As
Integer

End Module

Attention à la directive d'Import sur la première ligne du fichier, elle est très importante.
Attention aussi au type de retour qui n'est plus Long en VB2005 mais Integer.

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
10 sept. 2007 à 08:52
Merci pour ces réponses...

Suis-je obligé de rajouter "As Control" comme il y a "If TypeOf CheckBoxN is Chekbox" then... (sachant que dans mon Form, je n'ai que des CheckBoxs) ?
Auquel cas, comment dois-je écrire "CheckBoxN.CheckState", car il me dit qu'il ne fait pas parti de ...Form.Control (ce qui n'arrive pas si j'enlève "As Control") ?
Malheureusement, cela ne fonctionne toujours pas quand je clique sur l'un de mes CheckBoxs, la procédure "QuandCheckBoxsChangent" ne se lance pas (peut-être car pour l'instant, j'ai enlevé "As Control") ?

Merci pour l'info sur le changement d'extension de Module sous VB2005 !
Dire que j'essayais, comme un acharné, de bidouiller dans un module externe mon code pour modifier l'ini, croyant que c'était pour cela qu'il ne marchait pas...

Pour l'effacement de Ligne dans mon ini, j'ai copié/collé ton code (donc logiquement pas d'erreur), mais il me renvoi :

alors que je l'ai appelé avec WritePrivateProfileString("SavedCheck", CheckBoxN.Text, "","C:\Plan de Charge.ini")
si je comprend (en gros) l'erreur, même en changeant le 3ème membre, j'ai toujours une erreur !

Quand cela sera résolu, que devrais-je entrer comme valeur pour que ma ligne de l'ini s'efface (comme dans le lien Microsoft que j'avais précité : "0&") ?
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
10 sept. 2007 à 11:54
Encore un soucis, je viens de me rendre compte que lors de la lecture dans mon fichier ini, les accent ne sont pas pris en compte...
Pendant un moment, le "Streamreader" que j'utilisait pour parcourir mon fichier supprimait les accents alors avec un peu de bidouille, je supprimais les accent avant de lui faire comparer les chaînes. Mais maintenant il me les remplace par des caractères style carré,...

Un avis ?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 sept. 2007 à 21:06

Pour les checkboxs, oui normalement il faut mettre ce code, c'est plus propre, même si tu n'as que des checkbox sur ton écran.Pour le fichier ini, voici le code exact, testé et approuvé :' Les 2 imports à mettre en haut du fichierImports System.Runtime.InteropServicesImports System.Text'  Les
déclarations des fonctions de l'API Win32 concernant les fichiers
ini#Region "Déclarations des API Win32"     _    Private Shared Function GetPrivateProfileInt(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Integer, ByVal lpFileName As String) As Integer    End Function     _    Private Shared Function WritePrivateProfileString(ByVal
lpApplicationName As
String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer    End Function     _    Private Shared Function GetPrivateProfileString(ByVal
lpApplicationName As
String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer    End Function     _    Private Shared Function WritePrivateProfileStruct(ByVal
lpszSection As
String, ByVal lpszKey As String, ByVal lpStruct() As Byte, ByVal uSizeStruct As Integer, ByVal szFile As String) As Integer    End Function     _    Private Shared Function GetPrivateProfileStruct(ByVal
lpszSection As
String, ByVal lpszKey As String, ByVal lpStruct() As Byte, ByVal uSizeStruct As Integer, ByVal szFile As String) As Integer    End Function     _    Private Shared Function GetPrivateProfileSectionNames(ByVal
lpszReturnBuffer() As
Byte, ByVal nSize As Integer, ByVal lpFileName As String) As Integer    End Function     _    Private Shared Function WritePrivateProfileSection(ByVal
lpAppName As
String, ByVal lpString As String, ByVal lpFileName As String) As Integer    End Function#End Region'
------------------------------------------------------------------------------------' La fonction pour supprimer une ligne dans le fichier, ici la
ligne 'Essais', dans la rubrique 'Test'WritePrivateProfileString("Test", "Essais", Nothing, "c:\temp\toto.ini")Pour le reste, j'ai pas de solution, dsl.---- Sevyc64  (alias Casy) ----# LE PARTAGE EST NOTRE FORCE #   
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017
11 sept. 2007 à 07:52
Merci encore une fois pour ta réponse, maleureusement je ne pourrais testé ce code que dans une semaine (vacances obligent)...
0
Rejoignez-nous