Pourquoi ma ListBox ne fonctionne qu'à partir d'une certaine valeur ?

Résolu
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 6 mars 2011 à 21:20
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 10 mars 2011 à 14:59
Bonjour,
J'ai une listbox composée de valeurs comprises entre 0.00 et -2.00 au pas de 0.01 (centième).
Cette listbox doit, lorsqu'on clique sur une de ces valeurs, effectuer 5 manipulations sur des textbox A,B,C,D,E.
Mon souci est le suivant :
- Pour les valeurs comprises entre -1.01 et -2.00 ==> Tout fonctionne impeccablement
- Pour les valeurs comprises entre 0.00 et -1.00 compris ==> rien ne va

J'ai fait ceci
' construction de la listbox des centièmes et affichage de -1.00 par defaut en haut de la listbox
        ListX.Items.Clear()
        ListX.Items.Add(" 0,00")
        For i = -0.01 To -2.0 Step -0.01
            ListX.Items.Add(i.ToString("0.00"))
        Next i
        ListX.TopIndex = 100

'début des calculs sur clic d'une valeur de la listBox
Private Sub ListX_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
TextX.Text = Double.Parse(ListQ.SelectedItem.ToString().Replace(".", ",")).ToString("0.00") 'TextX.Text est le nombre choisi dans la liste                 
Select Case Math.Abs(nombre)    ' on ne tient pas compte du signe
                    Case 0.0# To 1.0#
                        A.Text = "0,00"
                        B.Text = "0,00"
                        C.Text = "0,00"
                        D.Text = "0,00"
                        E.Text = -0.00"
                    Case -1.01 To -1.09
                        A.Text = "0,90"
                        B.Text = "0,90"
                        C.Text = "-0,95"
                        D.Text = "-0,95"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
.
.
                        Case -1.91 To -2.00
                        A.Text = "0,10"
                        B.Text = "0,10"
                        C.Text = "-0,15"
                        D.Text = "-0,15"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
                       


Autrement dit : entre Zéro et -1.00 ==> A,B,C,D,E sont fixes
Après, A,B,C,D sont Fixes et E est la différence entre La valeur choisie dans ma ListX et la valeur A.

Comment se fait il qu'entre 0.00 et -1.00, rien ne s'affiche pour E et que A,B,C,D aient des valeurs parfois fantasques

Merci

24 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 21:35
selon ton code
les cases -1.00 to -2.00
ne sont jamais verifiés puisque tu verifies
un absolue
Case Math.Abs(nombre)
peut etre écris
Case 1.01 To 1.09
Case 1.91 To 2.00

ou comme tu proposes traites les vrais valeurs
ce qui me semble plus logique puisque le listbox
contient que des valeurs négatives
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
9 mars 2011 à 22:26
Bonjour,

Une question que je me pose :
Pourquoi faire un comboBox par pas de 0.01 alors que tu traites le valeurs par pas de 0.1 ?

Je te suggère une petite variation :
Public Class ClsPasComboBox
Private mVariable1 as Double
Private mVariable2 as Double

Private mBorneInf as Double
Private mBorneMax as Double

Public Sub New (Byval pBorneInf as double, pBroneMax as Double, ByVal pVariablex As Double, ...)
mBorneInf = pBorneInf
mBorneMax = pBorneMax
mVariable1=pVariable1
mVariable2=pVariable2
...
End Sub

Public readonly Property Variable1 as Double
Get
Return mVariable1
End Get
End Property

...

Public Overrides Function ToString() As String
Return String.Format("{0:0.00} - {1:0.00}",pBorneMax, pBorneInf)
End Function
End Class


ComBobox.Items.Add(New ClsPasComboBox(-0.10, -0.01, 0.00, 0.00, 1.00, -2.596))


Ensuite, tu n'as plus qu'à caster l'item sélectionné et tu retrouves tout tes paramètres.

Mon site
3
Profil bloqué
10 mars 2011 à 13:17
'début des calculs sur clic d'une valeur de la listBox
Private Sub ListX_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
nombre = Convert.ToDouble(ListX.Items(ListX.SelectedIndices(0)).ToString)
TextX.Text = Double.Parse(ListX.SelectedItem.ToString().Replace(".", ",")).ToString("0.00") 'TextX.Text est le nombre choisi dans la liste
Select Case Math.Abs(nombre) ' on ne tient pas compte du signe
Case 0 To 1
A.Text = "0,00"
B.Text = "0,00"
C.Text = "0,00"
D.Text = "0,00"
E.Text = "-0.00"

Case 1.01 To 1.09 ' PAS DE SIGNE ( traite -1.01 à -1.09)
A.Text = "0,90"
B.Text = "0,90"
C.Text = "-0,95"
D.Text = "-0,95"
E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
.
.
Case 1.91 To 2 ' PAS DE SIGNE ( traite -1.91 à -2.00)
A.Text = "0,10"
B.Text = "0,10"
C.Text = "-0,15"
D.Text = "-0,15"
E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")



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
3
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
6 mars 2011 à 21:22
Je corrige mon code :

' construction de la listbox des centièmes et affichage de -1.00 par defaut en haut de la listbox
        ListX.Items.Clear()
        ListX.Items.Add(" 0,00")
        For i = -0.01 To -2.0 Step -0.01
            ListX.Items.Add(i.ToString("0.00"))
        Next i
        ListX.TopIndex = 100

'début des calculs sur clic d'une valeur de la listBox
Private Sub ListX_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
TextX.Text = Double.Parse(ListQ.SelectedItem.ToString().Replace(".", ",")).ToString("0.00") 'TextX.Text est le nombre choisi dans la liste                 
Select Case Math.Abs(nombre)    ' on ne tient pas compte du signe
                    Case 0.0# To 1.0#
                        A.Text = "0,00"
                        B.Text = "0,00"
                        C.Text = "0,00"
                        D.Text = "0,00"
                        E.Text = "-0.00"

                    Case -1.01 To -1.09
                        A.Text = "0,90"
                        B.Text = "0,90"
                        C.Text = "-0,95"
                        D.Text = "-0,95"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
.
.
                        Case -1.91 To -2.00
                        A.Text = "0,10"
                        B.Text = "0,10"
                        C.Text = "-0,15"
                        D.Text = "-0,15"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 mars 2011 à 21:54
Salut
si tu écris
au lieu de
Case 0.0# To 1.0#

Case 0.00 To 1.00
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
6 mars 2011 à 22:17
Bonjour,

Question bête :
Tu fais :
TextX.Text = Double.Parse(ListQ.SelectedItem.ToString().Replace(".", ",")).ToString("0.00")
puis :
Select Case Math.Abs(nombre)

nombre est assigné où ?
as-tu activer Option Strict ? Je pense que non.

Mon site
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
7 mars 2011 à 17:23
Pour te répondre ShayW, je ne peux pas sous vb.net, taper 0.00 simplement parce que d'autorité, VB.net me le repasse en 0.0 (il n'accepte pas les 00 après la virgule)

NHenry, j'avais oublié de copier une ligne dans le code, voici ce que j'ai exactement avec l'assignation de 'nombre' :

 Private nombre As Double ' valeur choisie dans la Listbox
' construction de la listbox des centièmes et affichage de -1.00 par défaut en haut de la listbox
        ListX.Items.Clear()
        ListX.Items.Add(" 0,00")
        For i = -0.01 To -2.0 Step -0.01
            ListX.Items.Add(i.ToString("0.00"))
        Next i
        ListX.TopIndex = 100

'début des calculs sur clic d'une valeur de la listBox
Private Sub ListX_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
nombre = Convert.ToDouble(ListQ.Items(ListQ.SelectedIndices(0)).ToString)
TextX.Text = Double.Parse(ListQ.SelectedItem.ToString().Replace(".", ",")).ToString("0.00") 'TextX.Text est le nombre choisi dans la liste                 
Select Case Math.Abs(nombre)    ' on ne tient pas compte du signe
                    Case 0.0# To 1.0#
                        A.Text = "0,00"
                        B.Text = "0,00"
                        C.Text = "0,00"
                        D.Text = "0,00"
                        E.Text = "-0.00"

                    Case -1.01 To -1.09
                        A.Text = "0,90"
                        B.Text = "0,90"
                        C.Text = "-0,95"
                        D.Text = "-0,95"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
.
.
                        Case -1.91 To -2.00
                        A.Text = "0,10"
                        B.Text = "0,10"
                        C.Text = "-0,15"
                        D.Text = "-0,15"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
 


En ce qui concerne option strict, tu parles de cette instruction, si je regarde "application designers, Ressource designers et settings designer, j'ai bien
'------------------------------------------------------------------------------
' 
'     Ce code a été généré par un outil.
'     Version du runtime :4.0.30319.1
'
'     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
'     le code est régénéré.
' 
'------------------------------------------------------------------------------

Option Strict On
Option Explicit On


Vois tu quelque chose que j'aurais oublié ?????? je ne comprends absolument pas pourquoi cela déconne jusqu'à -1.00 et fonctionne de -1.01 à -2.00
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
7 mars 2011 à 17:29
petite correction. Remplacer le premier code par :

 Private nombre As Double ' valeur choisie dans la Listbox
' construction de la listbox des centièmes et affichage de -1.00 par défaut en haut de la listbox
        ListX.Items.Clear()
        ListX.Items.Add(" 0,00")
        For i = -0.01 To -2.0 Step -0.01
            ListX.Items.Add(i.ToString("0.00"))
        Next i
        ListX.TopIndex = 100

'début des calculs sur clic d'une valeur de la listBox
Private Sub ListX_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
nombre = Convert.ToDouble(ListX.Items(ListX.SelectedIndices(0)).ToString)
TextX.Text = Double.Parse(ListX.SelectedItem.ToString().Replace(".", ",")).ToString("0.00") 'TextX.Text est le nombre choisi dans la liste                 
Select Case Math.Abs(nombre)    ' on ne tient pas compte du signe
                    Case 0.0# To 1.0#
                        A.Text = "0,00"
                        B.Text = "0,00"
                        C.Text = "0,00"
                        D.Text = "0,00"
                        E.Text = "-0.00"

                    Case -1.01 To -1.09
                        A.Text = "0,90"
                        B.Text = "0,90"
                        C.Text = "-0,95"
                        D.Text = "-0,95"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")
.
.
                        Case -1.91 To -2.00
                        A.Text = "0,10"
                        B.Text = "0,10"
                        C.Text = "-0,15"
                        D.Text = "-0,15"
                        E.Text = ((Double.Parse(TextX.Text)) + Double.Parse(A.Text.Replace(".", ","))).ToString("0.00")


le second concernant Option explicit est bon ... et le bug est toujours la
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 mars 2011 à 19:21
Salut

la construction du listx
Private Sub ConstructListx()
        Dim i As Double
        ListX.Items.Clear()

        For i = 0.0# To -2.01 Step -0.01
            ListX.Items.Add(i.ToString("0.00"))
        Next i

    End Sub


aussi tu ne peux pas nommer le textbox E
parceque e est utilisé comme parametre
ByVal e As System.EventArgs
Private Sub ListX_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListX.Click
        Dim nombre As Double
        If TypeOf sender Is ListBox Then
            Try
                nombre = Double.Parse(DirectCast(sender, ListBox).Text)
                Select Case Math.Abs(nombre)
                    Case 0.0# To 1.0#
                        A.Text = "0,00"
                        B.Text = "0,00"
                        C.Text = "0,00"
                        D.Text = "0,00"
                        Etextbox.Text = "-0.00"
                  'je n'ai pas testé le reste

                End Select
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Exit Sub

            End Try

        End If
    End Sub
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
7 mars 2011 à 23:14
Bonjour,

Conseil de base, nomme tes variables/contrôles de manière cohérentes (préfixage) :
(mes habitudes)
Variable :
pPrm, variable Prm passée en paramètre d'une fonction
m : attribut d'objet
ms : attribut de classe
l : locale
?t : Variable de type tableau/liste (autre variante : Lst)

Pour les contrôles :
Txt TextBox
Lbl Label
Cmb Button
Chk CheckBox
...

Frm Form
Cls Classe
Mdl Module
Clt Contrôle utilisateur

Comme ça tu évites les conflits et rend le code plus lisible.

Mon site
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 mars 2011 à 01:06
Non mais en vrai les texbox ont. Un autre nom. C'etait juste pour simplifier ici
Par contre j'ai teste et reteste et toujours aucun affichage pour E entre 0,00 et -1.00
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 mars 2011 à 01:06
Non mais en vrai les texbox ont. Un autre nom. C'etait juste pour simplifier ici
Par contre j'ai teste et reteste et toujours aucun affichage pour E entre 0,00 et -1.00
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 mars 2011 à 12:37
Salut
Dis moi d'après toi si je choisis entre 0.00
et -1.00 quel case correspond ?
Il n'y a pas de case pour les nombres entre
0.00 et -1.00
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
9 mars 2011 à 16:06
ben entre 0.00 -1.00 le resultat est une valeur fixe et dans ma listX, je peux choisir 0.00; -0.01 .......-0.99; -1.00

tout le problème vient des valeurs entre 0.00 et -1.00 c'est la que je n'ai pas d'affichage .... a moins qu'il ne faille mettre entre -0.00 et -1.00 ......
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 16:16
si je choisis dans le listbox -0.02
il n'y a aucun case dans to code pour
les nombres entre 0.00 to -1.00
ajoutes

Case 0.0# To -1.0#
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
9 mars 2011 à 19:28
Select Case Math.Abs(nombre)    ' on ne tient pas compte du signe
                    Case 0.0# To 1.0#


extrait du code précédant.
Select Case Math.Abs(nombre) ' on ne tient pas compte du signe
ne me dispense pas d'entrer des valeurs négative ??????? ceci expliquerait cela alors
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 mars 2011 à 20:35
bien
1 je n'avais pas fait attention au math.abs
j'ai testé de nouveau avec le debogger
je choisis dans la listX -0.05
dans l'évenement ListX_Click
j'obtiens
Case 0.0# To 1.0#
A.Text = "0,00"
B.Text = "0,00"
C.Text = "0,00
D.Text = "0,00"
Etextbox.Text = "-0.00"
donc ça marche

2 si tu verifies les valeurs absolues à quoi sert Case -1.01 To -1.09 ? Case -1.91 To -2.00

comment ça peut fonctionner avec -1.3 par ex
et tu dis que ça fonctionne
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
9 mars 2011 à 21:18
eh bien j'avoue ne pas trop comprendre, en même temps je me demande si il ne serait pas plus rigoureux de ne pas mettre de valeur absolue et de traiter les valeurs avec leurs vrais signes, tu en penses quoi ?
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
10 mars 2011 à 11:55
Bonjour,

Pour te répondre, NHenry, il arrive frequemment que l'on selectionne une valeur de listX au centieme, par exemple -1.64 ou -1.89 mais pour l'instant les calculs ne sont pas affinés au centieme c'est pouquoi on ne les voit pas.

SayW, je vais traiter les valeurs "réelles" et je reviens .....

merci a vous 2
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 mars 2011 à 13:30
Bonjour Galain

Pourquoi remplacer le séparateur décimal par ,
0
Rejoignez-nous