Conseil sur le parametrage d'une textbox [Résolu]

Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 16 mars 2011 à 12:57 - Dernière réponse : Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention
- 16 mars 2011 à 19:14
Bonjour,
Mon appli possède plusieurs textbox que j'ai paramétré ainsi (exemple pour la textbox S):
Private Sub S_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S.GotFocus
        S.BackColor = Color.DarkCyan
    End Sub
    Private Sub S_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S.Leave
        S.Text = S.Text.Replace(".", ",")
        With oeil(indiceoeil)
            .valS = Convert.ToDouble(S.Text)
            S.Text = .valS.ToString("0.00") ' 2 chiffres après la virgule
            SIMAGE.Text = .valS.ToString("0.00")
        End With
    End Sub
    Private Sub S_Textleave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S.Leave
        S.BackColor = Color.LightSlateGray
        If S.Text < -10 Or S.Text > 6.0 Then
            If MessageBox.Show("La valeur S doit être comprise entre -10.00 et +6.00", "Données hors plage", MessageBoxButtons.OK, MessageBoxIcon.Warning) Then
                S.Focus()
                S.Text = ""
                S.BackColor = Color.DarkCyan
                C.BackColor = Color.LightSlateGray
            End If
        End If
    End Sub


-Donc au départ ma textbox se met en darkcyan dés qu'elle a la focus.
-J'entre la valeur, le séparateur est la virgule et quand je tabule, la valeur entrée s'arrondit a deux décimale (Par exemple j'entre -4, je tabule et ca affiche -4.00
- Quand je tabule, donc la textbox perd le focus, ca couleur redevient celle d'origine et je borne la valeur S

Mon souci :
Tout fonctionne TANT que j'entre des valeurs rondes (-4 ou -3 ou -2 ...) mais si j'entre une valeur décimale style -3.21 ou pire encore, -3.2145 tout plante en me disant
"La conversion de la chaine "-3.2145" en type double n'est pas valide

Moi je voudrais, si j'entre -3.2145, avoir -3.21 des que je tabule ou même encore mieux, quand j'entre la valeur, les caracteres -3,21 s'ecrivent mais pas 45

Je galère pour trouver une solution, vos lumières m'aideraient vraiment beaucoup

Merci
Afficher la suite 

Votre réponse

8 réponses

cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 16 mars 2011 à 18:47
+3
Utile
Salut essaie cela
on traite la valeur rentrée dans S lorsque l'on quitte S
si on rentre une valeur numérique on teste les bornes de valeurs admises
si les bornes sont incorrectes message d'erreur et ressaisie
si la valeur n'est pas numérique message d'erreur et ressaisie

si tout est correct on affiche S.text avec 2 chiffres après la virgule
Pour la textbox S on utilise la variable .valS qui fait partie de la structure oeil (indiceoeil indiquant si c'est loeil droit ou l'oeil gauche)

    Private Sub S_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S.GotFocus
        S.BackColor = Color.DarkCyan ' S a le focus
    End Sub
    
    Private Sub S_Textleave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles S.Leave
        ' S perd le focus
        ' ATTENTION : Vérifier ici si la textbox S contient une valeur numérique (code à écrire)
        ' si S n'est pas numérique message d'erreur et redonner le focus à S
        With oeil(indiceoeil)
            S.Text = S.Text.Replace(".", ",")
            If Double.TryParse(S.Text,.valS) then ' test si numérique
                ' S contient bien une valeur numérique
                S.BackColor = Color.LightSlateGray
                .valS = Convert.ToDouble(S.Text)
                If .valS < -10 Or .valS > 6.0 Then
                    ' on affiche un message d'erreur et on redonne le focus à S pour renouveler la saisie
                     MessageBox.Show("La valeur S doit être comprise entre -10.00 et +6.00", "Données hors plage",MessageBoxButtons.OK, MessageBoxIcon.Warning) 
                    S.Focus()
                    S.Text = ""
                    S.BackColor = Color.DarkCyan
                    C.BackColor = Color.LightSlateGray
                Else
                    ' Valeur correcte dans la TextBox S
                    S.Text = .valS.ToString("0.00") ' 2 chiffres après la virgule
                    SIMAGE.Text = S.Text
                End If
            Else
                MessageBox.Show("La valeur S n'est pas une valeur numérique", "Données incorrecte",MessageBoxButtons.OK, MessageBoxIcon.Warning) 
                S.Focus()
                S.Text = ""
                S.BackColor = Color.DarkCyan
                C.BackColor = Color.LightSlateGray
            End If
        End With
    End Sub


bon courage !


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Galain
NHenry 14179 Messages postés vendredi 14 mars 2003Date d'inscription 23 mai 2018 Dernière intervention - 16 mars 2011 à 13:42
0
Utile
Bonjour,

Pourquoi ne pas utiliser le contrôle NumericUpDown ?

Mon site
Commenter la réponse de NHenry
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 16 mars 2011 à 13:46
0
Utile
Salut

Première idée : un problème de virgule et de point.
Tente le remplacement du point par une virgule (ou l'inverse) avant de faire ta conversion.

Quelle est la structure de 'oeil' ?

"les caracteres -3,21 s'ecrivent mais pas 45"
Cela semble normal puisque tu reformate le champ de saisie :
S.Text = .valS.ToString("0.00") ' 2 chiffres après la virgule

Comparer un texte à un chiffre : pas une bonne idée; résultat non garanti :
If S.Text < -10 Or S.Text > 6.0 Then

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 16 mars 2011 à 13:55
0
Utile
Bonjour Jack,
En fait ce que je voulais dire c'est que si j'ecrivais -3.2145, je n'obtenais pas le resultat voulu.
Moi je voudrais que cela affiche -3.21 alors que dans mon cas, l'appli plante carrément.
Commenter la réponse de Attila54
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 16 mars 2011 à 13:58
0
Utile
Salut NHenry,
Je n'utilise pas contrôle NumericUpDown car très franchement, je ne le comprends pas. J'ai essayé il y a quelque temps, mais rien n'à fonctionné à mon grand regret
Commenter la réponse de Attila54
NHenry 14179 Messages postés vendredi 14 mars 2003Date d'inscription 23 mai 2018 Dernière intervention - 16 mars 2011 à 14:01
0
Utile
Bonjour,

Pourtant ce controle conviendrait parfaitement à ton usage, persiste pour voir son utilité.

Sinon, je n'avais pas tilté sur cette ligne :
If S.Text < -10 Or S.Text > 6.0 Then

Mets TOUJOURS Option Explicit et Option Strict à On.
Ensuite, caste correctement tes variables.

Mon site
Commenter la réponse de NHenry
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 16 mars 2011 à 14:06
0
Utile
je vais regarder du cote de ce controle, mais franchement j'ai 2 heures pour resoudre le truc et je sens que cela va être court ... trop court pour moi qui ne suis pas developpeur
Commenter la réponse de Attila54
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 16 mars 2011 à 19:14
0
Utile
Salut GAlain, alors ton code fonctionne nickel,que dire de plus sinon merci a toi ainsi qu'à vous tous.
Commenter la réponse de Attila54

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.