Gérer les changements sur les controles d'une fenêtre

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 20 mai 2006 à 00:44
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 20 mai 2006 à 18:29
Salut tout le monde,
Bien voilà je voudrais gérer les changements d'états de textbox dans une fenêtre.
vous savez le petit bouton valider ou cancel qui devient enabled quand on change le contenu d'un textbox.

je pensais utiliser un système à drapeaux dans le style 00010000 donc si une valeur est à 1 il y a changement donc on passe le bouton à enabled si deux sont à 1 on est toujours à enabled mais je ne vois pas comment le coder.

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 07:27
tu as l'évenement Change ....


Private Sub Text1_Change()

    Command1.Enabled = (Text1.Change <> "")

End Sub

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
20 mai 2006 à 12:19
Salut Renfiel,
Je connais l'événement change :
   - D'abord Text1.Change n'existe pas
   - Ensuite tu as deux TexBox :
      tu changes le premier : ok tout va bien le bouton passe à enabled
      tu changes le deuxième : ok là encore cela reste sur enabled
      tu remet le deuxième à son état initial et la ça ne marche plus car il ne fait la comparaison que sur le textbox actuel sans se préocuper du premier. et c'est ce que je veux gérer aussi simplement que possible.

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 12:31
"D'abord Text1.Change n'existe pas"


j'ai pas compris tout de suite jusqu'a ce que je remarque mon erreur de copier/coller (Text1.Change au lieu de Text1.Text)



pour la validation de ton formulaire, tu as plusieurs solutions....



tu peux utiliser la méthode ValidateControls de ta Form


une autre solution, et de centraliser tous tes tests dans une fonction,
et d'appeler cette dernière avant de valider ton formulaire.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
20 mai 2006 à 15:09
Hum voilà ce que j'ai trouvé si y'a plus simple je suis preneur ....
Option Explicit
Dim Text1Save As String: Dim Text2Save As String: Dim Text3Save As String
Dim c_Item As String: Dim c_Change As String



Private Sub Cmd3_Click()
 Unload Me
End Sub



Private Sub Form_Initialize()
' on initialise les textbox
Text1 = "Pas changé"
Text2 = "Encore"
Text3 = "Fini"
Text1Save = Text1
Text2Save = Text2
Text3Save = Text3
' au dépard tous les flags sont à zéro
c_Item = "0000"
c_Change = "0000"
Cmd1.Enabled = False

End Sub



Private Sub Text1_Change()



Cmd1.Enabled = Change((Text1 <> Text1Save), 1)



End Sub



Private Function Change(Item As Boolean, Place As Byte) As Boolean



Dim c
    If c_Item = "" Then Exit Function
    ' On permute le flag correspondant
    c = Left(c_Change, Place - 1) & c_Cstr(Item) & Right(c_Change, Len(c_Change) - Place)
   
    Change = (c_Item <> c)
    c_Change = c
End Function




Ici je fais une conversion y'a peut-être une manière plus simple

Private Function c_Cstr(Item As Boolean) As String
Select Case Item
    Case "vrai"
        c_Cstr = "1"
    Case "faux"
        c_Cstr = "0"
    Case Else
        c_Cstr = "0"
End Select



End Function



Private Sub Text2_Change()
Cmd1.Enabled = Change((Text2 <> Text2Save), 2)
End Sub



Private Sub Text3_Change()
Cmd1.Enabled = Change((Text3 <> Text3Save), 3)
End Sub



Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 16:58
pas très joli joli....

de plus, la fonction c_Cstr utilise "vrai" et faux" et ca, ce n'est pas bon du tout......

un boolean ne peux avoir, par définition que deux etat, et passer par
la valeur textuelle, localisée (française) est très mauvais.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 17:06
j'avoue ne pas bien saisir ce que tu cherches a faire.....

j'ai du mal a cerner ta problématique...


est-ce un peu comme le bouton 'Appliquer' des écrans d'option, qui s'active dès qu'une option a réélement été changée ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
20 mai 2006 à 18:27
vi c'est ça pour le vrai faux j'ai fait la modif
bé crée une feuille avec 3 textbox (text1 2 et 3) trois boutons (cmd1 2 et 3) et colles le code tu verra le résultat si y'a plus simple sans moulte condition if je suis preneur

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
20 mai 2006 à 18:29
voilà le dernier code :
Option Explicit



Dim c_Item As String: Dim c_Change As String



Private Sub Cmd2_Click()
Text1 = Text1.Tag
Text2 = Text2.Tag
Text3 = Text3.Tag
End Sub



Private Sub Cmd3_Click()
 Unload Me
End Sub



Private Sub Cmd4_Click()
Form2.Show



End Sub



Private Sub Form_Initialize()
' on initialise les textbox
Text1 = "Pas changé"
Text2 = "Encore"
Text3 = "Fini"
Text1.Tag = Text1
Text2.Tag = Text2
Text3.Tag = Text3
' au dépard tous les flags sont à zéro
c_Item = "0000"
c_Change = "0000"
Cmd1.Enabled = False
Cmd2.Enabled = False
End Sub



Private Sub Text1_Change()



Cmd1.Enabled = Change((Text1 <> Text1.Tag), 1)
Cmd2.Enabled = Change((Text1 <> Text1.Tag), 1)



End Sub



Private Function Change(Item As Boolean, Place As Byte) As Boolean



Dim c
    If c_Item = "" Then Exit Function
    ' On permute le flag correspondant
    c = Left(c_Change, Place - 1) & c_Cstr(Item) & Right(c_Change, Len(c_Change) - Place)
   
    Change = (c_Item <> c)
    c_Change = c
End Function



Private Function c_Cstr(Item As Boolean) As String
Select Case Item
    Case True
        c_Cstr = "1"
    Case False
        c_Cstr = "0"
    Case Else
        c_Cstr = "0"
End Select



End Function



Private Sub Text2_Change()
Cmd1.Enabled = Change((Text2 <> Text2.Tag), 2)
Cmd2.Enabled = Change((Text2 <> Text2.Tag), 3)



End Sub



Private Sub Text3_Change()
Cmd1.Enabled = Change((Text3 <> Text3.Tag), 3)
Cmd2.Enabled = Change((Text3 <> Text3.Tag), 3)



End Sub






Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Rejoignez-nous