Pourquoi ma ListBox ne fonctionne qu'à partir d'une certaine valeur ? [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,
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

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
14765
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
151
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
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
'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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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")
 
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut
si tu écris
au lieu de
Case 0.0# To 1.0#

Case 0.00 To 1.00
Messages postés
14765
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
151
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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
14765
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
151
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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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 ......
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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#
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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 ?
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour Galain

Pourquoi remplacer le séparateur décimal par ,