Gérer les changements sur les controles d'une fenêtre
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
20 mai 2006 à 00:44
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDerniè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.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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 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