Je m'emmele dans les conversions ... comment avoir un affichage 2 chiffres après [Résolu]

Signaler
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Bonjour,
Dans une appli, je rencontre un petit souci
Je considere que j'ai deux textbox A, B et C
Je veux la chose suivante :
- Quand je rentre une valeur dans A et que je tabule, je veux que B se colore en Darkcyan
- Je rentre une valeur dans B, je veux que

- automatiquement la valeur s'affiche avec 2 chiffres
après la virgule (ex : j'entre 41, l'affichage met 41.00 ou j'entre 41.2 l'affichage met
41.20)
- Si la valeur entrée dans B est inferieure a 36 ou supérieure à 48, j'aie une messagebox
qui me dise "La valeur de B doit être comprise entre 36 et 48, voulez vous forcer la
règle ?
* Si je dis non, focus sur B, effacement de la valeur entrée en B, coloration de B en
Darkcyan
* Si je dis oui, la valeur entrée reste dans la textbox B, la textbox se colore en
vert et le focus passe en C

J'ai fait de code qui foire lamentablement :
Private Sub B_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B.GotFocus
        B.BackColor = Color.DarkCyan  ' B prends la couleur DarkCyan dés qu'il a le focus (ou des que la valeur prédédante le perd)
    End Sub

Private Sub B_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B.Leave
        B.Text = B.Text.Replace(".", ",")     'affichage du "."
        B.BackColor = Color.LightSlateGray    'B revient à sa couleur initiale a la perte de
                                               focus 
        B.Text =.valB.ToString("0.00")        '2 chiffres après la virgule        
        If B.Text < 36 Or B.Text > 48 Then
            If MessageBox.Show("La valeur B doit être comprise entre 36 et 48, voulez vous forcer la règle ? ", "Valeur incorrecte", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                C.Focus() 'le focus va sur C
                B.BackColor = Color.Green 'B se colore en vert 
            Else
                B.Focus() 'le focus revient sur B
                B.BackColor = Color.DarkCyan ' B reprend la couleur qu'il a au focus
                B.Text = "" 'B affiche la valeur entrée avec 2 chiffres après la virgule
                C.BackColor = Color.LightSlateGray 'C garde sa couleur normale
            End If
        End If
    End Sub


Dans ce code, tout fonctionne sauf que :
- Je le trouve compliqué
- J'ai un problème d'affichage des valeurs a 2 chiffres après la virgule (B.Text=.valB.ToString ("0.00") à besoin d'un with/End With)
-
B.Text = "" 'B affiche la valeur entrée avec 2 chiffres après la virgule
ne fonctionne pas


Pourriez vous me suggerer quelque chose de plus "operationnel" ? ou a defaut me dire comment je fais pour les point sombres ?

8 réponses

Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
Private Sub B_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B.GotFocus
        B.BackColor = Color.DarkCyan  ' B prends la couleur DarkCyan dés qu'il a le focus
    End Sub

Private Sub B_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B.LostFocus
        B.Text = B.Text.Replace(".", ",")     'affichage du "."
        B.BackColor = Color.LightSlateGray    'B revient à sa couleur initiale   
        dim valeur as double =  Convert.Todouble(B.Text) ' variable NUMERIQUE 
        B.Text = valeur.ToString("0.00")        '2 chiffres après la virgule       
        If valeur < 36 Or valeur > 48 Then
            If MessageBox.Show("La valeur B doit être comprise entre 36 et 48, voulez vous forcer la règle ? ", "Valeur incorrecte", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                C.Focus() 'le focus va sur C
                B.BackColor = Color.Green 'B se colore en vert 
            Else
                C.BackColor = Color.LightSlateGray 'C garde sa couleur normale
                B.BackColor = Color.DarkCyan ' B reprend la couleur qu'il a au focus
                B.Text = "" ' on efface B car on ne force pas la règle
                B.Focus() 'le focus revient sur B
            End If
        End If
    End Sub


Tiens petit cadeau : utilise LostFocus



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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Private Sub TextBoxA_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBoxA.LostFocus
        If TypeOf sender Is TextBox Then
            TextBoxB.BackColor = Color.Cyan
        End If
    End Sub

    Private Sub TextBoxB_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBoxB.LostFocus
        Dim valeurdecimal As Double
        Dim result As DialogResult
        If TypeOf sender Is TextBox Then
            If Double.TryParse(DirectCast(sender, TextBox).Text, valeurdecimal) Then
                DirectCast(sender, TextBox).Text = valeurdecimal.ToString("0.00")
                If valeurdecimal < 36 Or valeurdecimal > 48 Then
                    result = MessageBox.Show("la valeur doit etre comprise entre 36 et 48 continuer ?", "attention", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)
                    If result = Windows.Forms.DialogResult.No Then
                        DirectCast(sender, TextBox).Text = String.Empty
                        DirectCast(sender, TextBox).Focus()
                    Else
                        DirectCast(sender, TextBox).BackColor = Color.Green
                        TextBoxC.Focus()
                    End If
                End If
            Else
                result = MessageBox.Show("valeur numérique seulement", "attention", MessageBoxButtons.OK, MessageBoxIcon.Error)
                DirectCast(sender, TextBox).Text = String.Empty
                DirectCast(sender, TextBox).Focus()
            End If
        End If
    End Sub
End Class
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

j'oubliais ....
Quand je quitte l'appli, j'au un message d'erreur du visiblement a
B.Text = ""
ca me dit : la conversion de la caine "" en type double n'est pas valide. J'avoue ne pas comprendre grand chose a ces problemes de conversions
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

quand tu dis
Je rentre une valeur dans B, je veux que
- automatiquement la valeur s'affiche avec 2 chiffres


quel évenement ?
le textbox est vide j'ai l'intention d'inserer
la valeur 21 alors je frappe 2
maintenant après avoir frappé 2 tu veux que le
textbox affiche 2.00 mais en fait je n'ai pas
fini de frapper tout le nombre
pour cela tu doit decider à quel évenement
formatter ta valeur
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

eh bien souvent, les utilisateurs ne s'amusent pas a taper les 0 situés après les virgules, par exemple :
pour taper 2.00 , ils tapent 2
pour taper 2.10 , ils tapent 2.1

moi je veux que des que j'ai entré la valeur dans B et que j'ai tabulé (donc a la perte de focus de B et au focus de C, les valeurs 2.00 ou 2.10 (pour l'exemple du dessus) s'affichent dans B

C'est en quelque sorte une "harmonisation" dans la facon d'afficher les champs
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

Merci a vous, j'avais de mon coté "bidouillé" un peu car dans cette partie de code, il y a aussi une boucle "with indiceoeil" et le plus difficile pour moi est d'integrer les bonnes valeurs dans la boucle en question. Mon "truc" marche mais j'ai un peu l'impression d'avoir codé avec les pieds, le programmeur initial etant plus doué que moi
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Galain plus rapide
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

Gros merci a vous 2