Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 février 2017
-
31 août 2007 à 13:22
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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....
A voir également:
Instruction incorrecte à l'extérieur d'une procédure
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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))
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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 ?
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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)...
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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)
?
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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 ?
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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 !!!!
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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&") ?
Scoubi7
Messages postés88Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention22 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é,...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #