View Full Version : Visual Basic et annuler une action
ThOMaZ2118
18 août 2004, 13h57
Salut,
Je suis en train de faire un form oui il y a des textboxes a remplir mais qui ne sont pas facultatifs.
Je voudrais quand j'essaye de fermer la fenetre qu'il me dise que je dois remplis les cases.
Voici le code:
Private Sub Form_Unload(Cancel As Integer)
If a = 1 Then
If txtName.Text = "" Then
MsgBox ("All boxes have to be filled before you exit so the person is added")
End If
End If
End Sub
Quand je ferme la fenetre il me donne bien le message box mais quand je fait OK il la ferme quand meme.
J'essaye de trouver un moyen pour qu'il ne la ferme pas quand je clic sur la croix et que la valeur de a est sur 1.
J'éspère que c'est clair :confused:
merci :)
Cougar
18 août 2004, 14h08
Jme souviens plus très bien de la syntaxe en VB, mais faudrait (c'est une des possibilités en tout cas) recharger le Form pour revenir à la "saisie du texte".
Un truc du genre form1.load ou quoi (mais doit y avoir des subtilités si y a plusieurs zone de saisies et qu'on ne veut pas tout effacer).
sinon jviens d'y penser là :)
Private Sub Form_Unload(Cancel As Integer)
Loop
If a = 1 Then
If txtName.Text = "" Then
MsgBox ("All boxes have to be filled before you exit so the person is added")
End If
while txtname.text <> ""
End If
End Sub
enfin la syntaxe est ptet pas bonne, tu peux faire ça avec un return, ou un autre if imbriqué, etc etc
ThOMaZ2118
18 août 2004, 14h49
Si je me rapelle bine il s'agit de form.show mais quand on lui dit sur le exit qu'il doit ouvrir le form que l'ont viens de fermer, il ne le rouvre pas.
T'a solution ne m'a pas l'air mauvaise mais ca ne le fera que pour le premier textbox, si la personne commence par remplir la derniere case il ne pouras pas car il demanderas toujours de remplir la premiere.
Mais j'ai trouver une autre solution qui a a voir avec la base de donnees et je ne vais pas commencé a expliquer en detail mon devoir.
Merci pour l'aide, ca me sera utile :)
cameleon69
18 août 2004, 15h47
Pour que la méthode unload ne s'applique pas il faut mettre le code suivant
Cancel = 0 ou 1
Je ne sais plus si c'est 1 ou 0
Mais cela bloquera la méthode. ;)
Cougar
18 août 2004, 18h37
T'a solution ne m'a pas l'air mauvaise mais ca ne le fera que pour le premier textbox, si la personne commence par remplir la derniere case il ne pouras pas car il demanderas toujours de remplir la premiere.
bah tu rajoutes d'autres conditions textbox <> "" and blablabla, comme c'est une petite app y a pas besoin d'écrire 2000 lignes de codes ;)
cameleon69
18 août 2004, 19h01
Je pense que tu dois pouvoir faire une boucle while en testant si le control est un textbox et à ce moment la tester s'il est vide ou pas.
Magi-X
18 août 2004, 19h17
ben normalement il suffit de faire un "exit sub" ou quelque chose du genre, question qu'il ne termine pas le sub et il ne le fermera pas alors ... me souvien avoir utiliser ca dans un de mes script ;)
pour plus d'info thomas tu sais comment me joindre ;)
cameleon69
19 août 2004, 11h20
Bon je viens vite fait de faire un test chez moi.
Voici le genre de code que tu dois mettre pour tester si tous les controles TEXTBOX sont bien différents de vide.
Private Sub Form_Unload(Cancel As Integer)
Dim ctrl As Control
For Each ctrl In Me.Controls
'je recherche que les controles de type Textbox
If TypeOf ctrl Is TextBox Then
'si le controle est vide alors je sors de la boucle
'et j'empeche la fermeture de la form
If ctrl.Text = "" Then
Cancel = 1
'message informant d'une erreur
MsgBox "Vous devez remplir tous les champs obligatoires.",,"Erreur de saisie"
Exit For
End if
End If
Next ctrl
End Sub
Voila qui devrait répondre à ta demande.
Cette méthode teste tous les controles de la form et si c'est une textbox elle vérifie que la textbox n'est pas vide, si tel est le cas à la première rencontrée elle sort de la boucle et ne ferme pas la fenêtre.
Bien entendu tu peux mettre un message à l'aide d'une msgbox avant le Exit For. ;)
vBulletin® v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.