lomatic
Messages postés37Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention 9 octobre 2009
-
4 nov. 2007 à 19:28
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
20 nov. 2007 à 22:34
Bonsoir à tous,
Je n'arrive pas à coder ce qu'il faut dans : Private Sub txtDate_LostFocus(Index As Integer) , à partir de GestionErreurs.
Voici le code de la forme :
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Test évènements et méthodes couche présentation :
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Indexes du groupe de controle hsbDate.
Private Enum enuCtlScrollBar
Jour
Mois
Annee
End Enum
' Indexes du groupe de controle txtDate.
Private Enum enuCtlTxt
Jour
Mois
Annee
End Enum
' Constantes pour HScrollBar.
Private Const JOUR_MIN As Integer = 1
Private Const JOUR_MAX As Integer = 31 ' 31 jours en Janvier.
Private Const MOIS_MIN As Integer = 1 ' Janvier.
Private Const MOIS_MAX As Integer = 12
Private Const ANNEE_MIN As Integer = 1000
Private Const ANNEE_MAX As Integer = 3000
' Evenement : Form_Load
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Au chargement de la FORM, on initialise les contrôles HScrollBar.
' Cette initialisation déclenche l'événement hsbDate_Change de chaque contrôle HScrollBar,
' ce qui initialise donc l'ensemble des contrôles.
Private Sub Form_Load()
'Initialise les contrôles HScrollBar
hsbDate(0) = JOUR_MIN
hsbDate(1) = MOIS_MIN
hsbDate(2) = ANNEE_MIN
End Sub' Form_Load
' Evenement : hsbDate_Change
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Quand 1 controle HScrollBar change, on rafraichi l'ensemble des controles.
' HScrollBar change suite a :
' - une action utilisateur,
' - une modification par programme par txtDate_LostFocus(),
' _ une modification de sa valeur MAX par Form_Load().
' Evenement : txtDate_LostFocus
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Cet evenement est declenche quand l'utilisateur a modifie
' une des 3 TextBox et que le focus sur ce controle est perdu.
' On verifie la saisie,
' - si elle est correcte on ajuste la HScroolBar de meme type jour(0), mois(1) ou annee(2),
' Ce qui declenchera l'evenement hsbDate_Change et donc rafraichira l'ensemble
' des controles.
Private Sub txtDate_LostFocus(Index As Integer)
If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) = 1 Then
hsbDate(Index) = txtDate(Index)
Else
GestionErreurs ' ===> Je ne sais pas quoi définir dans GestionErreurs afin que cela fonctionne
End If
End Sub
' Rafraichir_Controles
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Rafraichi l'ensemble des controles.
' Le rafraichissement des controles lblPlageDateSigne et imgSigneImage
' doit etre fait apres le rafraichissement du controle lblSigneTexte, dans la
' mesure ou on utilise la valeur de ce dernier pour rafraichir les 2 precedents.
' VerifierSaisie
' INPUT : Valeur Controle, ValMin et ValMax admissible.
' OUTPUT : Retourne le code erreur ou SANS_ERREUR.
' FONCTION : Verifie si la saisie utilisateur est correcte.
Private Function VerifierSaisie(p_strValeur As String, p_intMin As Integer, p_intMax As Integer) As enuTypeErreur
' Verifier que la valeur saisie est numerique afin que CInt ne genere une erreur.
If IsNumeric(p_strValeur) Then
If (CInt(p_strValeur) >= p_intMin) And (CInt(p_strValeur) <= p_intMax) Then
VerifierSaisie = enuTypeErreur.SANS_ERREUR
Else
VerifierSaisie = enuTypeErreur.DEPASSEMENT_CAPACITE
End If
Else
VerifierSaisie = enuTypeErreur.NON_NUMERIQUE
End If
End Function
' VerifierSaisie
' GestionErreurs
' INPUT : Controle a l'origine de l'erreur et Type d'erreur.
' OUTPUT : NA.
' FONCTION : Affiche une MsgBox signalant le type d'erreur de saisie,
' et redonne le focus a la TextBox incriminee en selectionnant son contenu.
Private Sub GestionErreurs(p_intOrigineErreur As Integer, p_intTypeErreur As Integer)
Dim strPrompt As String
Select Case p_intTypeErreur
Case enuTypeErreur.NON_NUMERIQUE
Select Case p_intOrigineErreur
Case enuCtlTxt.Jour
strPrompt = EM.ERREUR_JOUR
Case enuCtlTxt.Mois
strPrompt = EM.ERREUR_MOIS
Case enuCtlTxt.Annee
strPrompt = EM.ERREUR_ANNEE
Case Else
strPrompt = EM.ERREUR_INCONNUE
End Select' p_intOrigineErreur
Case enuTypeErreur.DEPASSEMENT_CAPACITE
strPrompt = EM.ERREUR_DEPASSEMENT_CAPACITE
Case Else
strPrompt = EM.ERREUR_INCONNUE
End Select' p_intTypeErreur
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 20 nov. 2007 à 22:34
Salut,
Tant mieux..
sauf qu' au départ la déclaration de VerifierSaisie est tout autre !
Rappel :
Private Function VerifierSaisie(p_strValeur As String, p_intMin As Integer, p_intMax As Integer) As enuTypeErreur
Ce qui t' obligeait à :
Dim intTypeErreur As enuTypeErreur