IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Listbox et radiobutton


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Listbox et radiobutton
    J’ai un petit exercice à faire
    Je saisis une valeur chiffre dans une texte box que ensuite je rajoute a une listbox credit si un radiobutton credit est coché ou à une list box debit si un radiobutton debit est coche grâce à un button click
    Au fur et à mesure les valeurs saisies sont rentrées dans la list credit ou dans la liste debit

    Çà je sais faire
    Ensuite on me demande de coder un button click pour retirer la dernière écriture et là je coince un peu
    Voici le code corrigé qui m’est donné et que je comprends mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Dim a, b As Integer 
       Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            End
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                a = CInt(Me.TextBox1.Text)
                If Me.RadioButton1.Checked Then
                    Me.ListBox1.Items.Add(Me.TextBox1.Text)
                    Me.ListBox2.Items.Add("0")
                    col1.Add("0")
                    col.Add(Me.TextBox1.Text)
                Else
                    Me.ListBox2.Items.Add(Me.TextBox1.Text)
                    Me.ListBox1.Items.Add("0")
                    col.Add("0")
                    col1.Add(Me.TextBox1.Text)
                End If
                Dim totalc As Integer
                For i As Integer = 1 To col.Count
                    a = col.Item(i)
                    totalc = totalc + CInt(a)
                Next
                Me.Label7.Text = totalc
                Dim totald As Integer
                For i As Integer = 1 To col1.Count
                    a = col1.Item(i)
                    totald = totald + CInt(a)
                Next
                Me.Label8.Text = totald
                Me.Label9.Text = totalc - totald
            Catch ex As Exception
                MsgBox("données non valide")
            End Try
        End Sub
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.RadioButton1.Checked = True
            Me.Label7.Text = 0
            Me.Label8.Text = 0
            Me.Label9.Text = 0
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                Me.ListBox1.Items.Clear()
                a = col.Count
                col.Remove(a)
                For i As Integer = 1 To col.Count
                    Me.ListBox1.Items.Add(col.Item(i))
                Next
                Me.ListBox2.Items.Clear()
                a = col1.Count
                col1.Remove(a)
                For i As Integer = 1 To col1.Count
                    Me.ListBox2.Items.Add(col1.Item(i))
                Next
                Dim totalc As Integer
                For i As Integer = 1 To col.Count
                    a = col.Item(i)
                    totalc = totalc + CInt(a)
                Next
                Me.Label7.Text = totalc
                Dim totald As Integer
                For i As Integer = 1 To col1.Count
                    a = col1.Item(i)
                    totald = totald + CInt(a)
                Next
                Me.Label8.Text = totald
                Me.Label9.Text = totalc - totald
            Catch ex As Exception
                MsgBox("la liste est vide")
            End Try
        End Sub
    End Class
    Je m’apercois que j’ai oublié les formules de politesse

    Bonjour merci d’avance et cordialement

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    La ligne de code suivante réalise la suppression de la dernière ligne de la ListBox npommée UneListBox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UneListBox.Items.RemoveAt(UneListBox.Items.Count - 1)
    ...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Suite de listbox et radiobutton
    Merci de votre réponse
    Mais si l’avant derniere valeur rentree est en credit et la derniere en debit ou le contraire
    Comment rédiger un code qui va enlever la derniere entree (dans le temps )
    À moins de faire deux lignes une pour enlever la derniere entree de la liste debit et une ligne pour enlever la derniere entree de la liste credit
    Mais cela ne me semble pas être ce qui est demandé dans l’exercice et le code proposé pour le button 2 me parait pour le moins brouillardeux
    Merci d’une réponse cordialement

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Perso, je déclarais une variable "TemoinDernierLB" au niveau de la classe (là où tu déclares a et b).
    Cette variable de type Byte (par exemple) serait affectée 0 ou 1 chaque fois qu'on ajoute une ligne dans un des ListBox :
    0 pour le ListBox "Crédit"
    1 pour le ListBox "Débit".
    Tu peux alors consulter cette variable chaque fois que tu veux savoir quel ListBox a été affecter en dernier.
    Bon amusement ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut list box toujours
    bonjour en demande de conseil à Phil Rob

    j'ai donc une petite application avec une valeur numérique que j'entre dans une text box et après ,avec le bouton ecrire et après avoir coché un radio bouton à crédit ou débit je rentre cette valeur dans une listbox crédit ou dans une listbox débit
    tout marche et en bas dans un label il affiche le total des crédits et des débits
    quand je veux retirer une valeur si j'ai rentré trois fois de suite une valeur en crédit et trois fois de suite une valeur en débit quand je click sur le bouton annuler il retire une valeur de la liste débit et affiche le nouveau total et si je reclique il l'enlève et diminue le total d'autant et quand il arrive à plus de valeur il m'affiche o valeurs dans la listbox et un total de 0 mais ne passe pas vers la colonne credit ou je voudrais enlever desvaleurs aussi
    j'ai beaucoup ramé mais sans succès en fait la variable public que vous m'avez conseillé de créer ne permet pas après de passer à la listbox débit
    en plus mon code me parait un peu tiré par les cheveux mais je suis très débutant
    a l'avance merci
    cordialement
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
     
     
    Public Class Form1
        Public cc As Byte
     
     
     
     
        Private Sub RB_DEBIT_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB_DEBIT.CheckedChanged
     
        End Sub
        Private Sub RB_CREDIT_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB_CREDIT.CheckedChanged
     
        End Sub
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub BT_ECRIRE_Click(sender As System.Object, e As System.EventArgs) Handles BT_ECRIRE.Click
            Dim a, b As Integer
            Dim totalc, totald As Double
     
     
     
            If (RB_CREDIT.Checked) Then
                LTB_CREDIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                a = LTB_CREDIT.Items.Count
                For i As Integer = 0 To (a - 1) Step 1
                    totalc = totalc + LTB_CREDIT.Items(i)
                Next
                LBL_TOTCRED.Text = totalc
                cc = 0
     
            ElseIf (RB_DEBIT.Checked) Then
                LTB_DEBIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                b = LTB_DEBIT.Items.Count
                For i As Integer = 0 To (b - 1) Step 1
                    totald = totald + LTB_DEBIT.Items(i)
                Next
                LBL_TOTDEB.Text = totald
                cc = 1
     
            End If
        End Sub
     
        Private Sub GroupBox3_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox3.Enter
     
        End Sub
     
        Private Sub BTN_QUITTER_Click(sender As System.Object, e As System.EventArgs) Handles BTN_QUITTER.Click
            End
        End Sub
     
        Private Sub BT_ANNULER_Click(sender As System.Object, e As System.EventArgs) Handles BT_ANNULER.Click
     
            Dim i As Integer
            Dim totalac, totalad As Double
     
            If cc = 0 Then
     
                LTB_CREDIT.Items.RemoveAt(LTB_CREDIT.Items.Count - 1)
                For i = (LTB_CREDIT.Items.Count - 1) To 0 Step -1
                    totalac = totalac + LTB_CREDIT.Items(i)
                    LBL_TOTCRED.Text = totalac
                Next
                LBL_TOTCRED.Text = totalac
     
            ElseIf cc = 1 Then
     
                LTB_DEBIT.Items.RemoveAt(LTB_DEBIT.Items.Count - 1)
                For i = (LTB_DEBIT.Items.Count - 1) To 0 Step -1
                    totalad = totalad + LTB_DEBIT.Items(i)
                    LBL_TOTDEB.Text = totalad
                Next
     
                LBL_TOTDEB.Text = totalad
     
            End If
     
        End Sub
     
        Private Sub LTB_DEBIT_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LTB_DEBIT.SelectedIndexChanged
     
        End Sub
     
        Private Sub GroupBox1_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox1.Enter
     
        End Sub
    End Class

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,
    Je vois que tu as suivi mon conseil précédent et que tu as implémenté une variable témoin (que tu as nommées cc) pour connaître laquelle des 2 ListBox est affectée en dernier.
    Maintenant, cette info ne te suffit plus : tu veux savoir quelle ListBox est affectée en dernier, mais aussi laquelle a été affectée avant la derrière, et aussi celle affectée avant l'avant-dernière, et aussi..., jusqu'à la première.
    Dans cette situation j’abandonnerais ma variable témoin (cc) et j'utiliserais un tableau cc(). Comme on ne sait pas d'avance combien d’affectations auront lieu, il faut gérer ce tableau dynamiquement.
    Soit déclaration du tableau (à la place de ta variable cc, note qu'il n'est pas nécessaire qu'elle soit Public, à cet endroit de la déclaration, elle est connue de toute la classe et cela suffit) :
    A chaque affectation d'une ListBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cc(cc.count - 1) = 0 ' 0 ou 1 : Affectation au dernier indice disponible de 0 ou 1 selon qu'il s'agisse de la listBox des Crédit ou celle des Débit.
    Redim Preserve cc(cc.count) ' préparer la place pour la prochaine affectation
    La dernière ListBox affectée est désignée par cc(cc.count - 1), de la même façon que le fait actuellement ta variable cc.

    Pour répondre au problème exprimé par ta dernière question, il faut tenir le tableau à jour en cas de suppression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ' Suppression la dernière ligne de la ListBox désignée par cc(cc.count - 1)
    ' Par exemple :
    '        ElseIf cc(cc.count - 1) Then
    '            LTB_DEBIT.Items.RemoveAt(LTB_DEBIT.Items.Count - 1)
     
                  Redim Preserve cc(cc.count - 1) ' Retirer la dernière valeur utilisée puisque devenue inutile après suppression de la ligne
     
    '            ..................................
    Quand tu supprimeras la dernière ligne de la dernière ListBox, Redim Preserve cc(cc.count - 1) videra le tableau et son Count vaudra 0 et à l'entrée de la procédure BT_ANNULER_Click, tu peux utilement insérer le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If cc.count < 1 Then 
    Exit Sub
    End If
    Je n'ai rien testé de tout ce code mais tu ne devrais pas avoir trop de difficultés à l’implémenter.

    Bon amusement ...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut list box toujours
    rebonjour
    désolé j'ai fait ce que tu m'as conseillé , cela ne marche pas
    et je n'arrive pas , en faisant le déboguage pas à pas détaillé à comprendre ce qu'il fait en particulier quand j'arrive à la dernière ligne lors d'un rajout de données ; je ne comprends pas;
    pour moi il faudrait mettre redim preserve count +1 pour ajouter une case
    d'autre part je saisis deux écritures d'affilée en crédit puis une en débit puis une en crédit normalement comme dans le bouton ecrire la dernière valeur rentrée est 0 si c''est un crédit et 1 si c'est un debit quand je fait retirer une écriture il devrait aller à la colonne qui correspond au 1 ou au 0 comme je le lui indique dans le if du bouton annuler or il ne le fait pas
    si je peux me permettre bon amusement et merci d'avance d'une réponse cordialement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
     
     
     
    Public Class Form1
        Public cc(0) As Byte
     
     
     
     
        Private Sub RB_DEBIT_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB_DEBIT.CheckedChanged
     
        End Sub
        Private Sub RB_CREDIT_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RB_CREDIT.CheckedChanged
     
        End Sub
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub BT_ECRIRE_Click(sender As System.Object, e As System.EventArgs) Handles BT_ECRIRE.Click
            Dim a, b As Integer
            Dim totalc, totald As Double
     
     
     
            If (RB_CREDIT.Checked) Then
                LTB_CREDIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                a = LTB_CREDIT.Items.Count
                For i As Integer = 0 To (a - 1) Step 1
                    totalc = totalc + LTB_CREDIT.Items(i)
                Next
                LBL_TOTCRED.Text = totalc
                cc(cc.Count - 1) = 0
                ReDim Preserve cc(cc.Count)
     
            ElseIf (RB_DEBIT.Checked) Then
                LTB_DEBIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                b = LTB_DEBIT.Items.Count
                For i As Integer = 0 To (b - 1) Step 1
                    totald = totald + LTB_DEBIT.Items(i)
                Next
                LBL_TOTDEB.Text = totald
                cc(cc.Count - 1) = 1
                ReDim Preserve cc(cc.Count)
            End If
        End Sub
     
        Private Sub GroupBox3_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox3.Enter
     
        End Sub
     
        Private Sub BTN_QUITTER_Click(sender As System.Object, e As System.EventArgs) Handles BTN_QUITTER.Click
            End
        End Sub
     
        Private Sub BT_ANNULER_Click(sender As System.Object, e As System.EventArgs) Handles BT_ANNULER.Click
            If cc.Count < 1 Then
                Exit Sub
            End If
            Dim i As Integer
            Dim totalac, totalad As Double
     
            If cc(cc.Count - 1) = 0 Then
     
                LTB_CREDIT.Items.RemoveAt(LTB_CREDIT.Items.Count - 1)
                For i = (LTB_CREDIT.Items.Count - 1) To 0 Step -1
                    totalac = totalac + LTB_CREDIT.Items(i)
                    LBL_TOTCRED.Text = totalac
                Next
                LBL_TOTCRED.Text = totalac
                ReDim Preserve cc(cc.Count - 1)
     
            ElseIf cc(cc.Count) = 1 Then
     
                LTB_DEBIT.Items.RemoveAt(LTB_DEBIT.Items.Count - 1)
                For i = (LTB_DEBIT.Items.Count - 1) To 0 Step -1
                    totalad = totalad + LTB_DEBIT.Items(i)
                    LBL_TOTDEB.Text = totalad
                Next
     
                LBL_TOTDEB.Text = totalad
                ReDim Preserve cc(cc.Count - 1)
            End If
     
        End Sub
     
        Private Sub LTB_DEBIT_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LTB_DEBIT.SelectedIndexChanged
     
        End Sub
     
        Private Sub GroupBox1_Enter(sender As System.Object, e As System.EventArgs) Handles GroupBox1.Enter
     
        End Sub
    End Class

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Désolé, j'ai eu tord de ne pas tester le code avant de te le proposer et j'ai eu tord de faire confiance à cc.Count.
    J'ai donc remplacé cc.Count par une variable NbValeurEncodee.
    J'ai transcrit les corrections dans ton code que je te renvoie ci-dessous.
    Outre les déclarations, j'ai apporté des modifications à Form1_Load, à BT_ECRIRE_Click et à BT_ANNULE_Click.
    Bonne soirée ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    Public Class Form1
        Dim cc() As Byte
        Dim NbValeurEncodee As Integer = 0
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ReDim cc(0)
        End Sub
     
        Private Sub BT_ECRIRE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ECRIRE.Click
            Dim a, b As Integer
            Dim totalc, totald As Double
     
            If (RB_CREDIT.Checked) Then
                LTB_CREDIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                a = LTB_CREDIT.Items.Count
                For i As Integer = 0 To (a - 1) Step 1
                    totalc = totalc + LTB_CREDIT.Items(i)
                Next
                LBL_TOTCRED.Text = totalc
                cc(NbValeurEncodee) = 0
     
            ElseIf (RB_DEBIT.Checked) Then
                LTB_DEBIT.Items.Add(TXT_SAISIE.Text)
                TXT_SAISIE.Clear()
                b = LTB_DEBIT.Items.Count
                For i As Integer = 0 To (b - 1) Step 1
                    totald = totald + LTB_DEBIT.Items(i)
                Next
                LBL_TOTDEB.Text = totald
                cc(NbValeurEncodee) = 1
     
            End If
     
            NbValeurEncodee += 1
            ReDim Preserve cc(NbValeurEncodee)
     
        End Sub
     
        Private Sub BTN_QUITTER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_QUITTER.Click
            End
        End Sub
     
        Private Sub BT_ANNULER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ANNULER.Click
     
            If NbValeurEncodee < 1 Then
                Exit Sub
            End If
     
            Dim i As Integer
            Dim totalac, totalad As Double
     
            If cc(NbValeurEncodee - 1) = 0 Then
     
                LTB_CREDIT.Items.RemoveAt(LTB_CREDIT.Items.Count - 1)
                For i = (LTB_CREDIT.Items.Count - 1) To 0 Step -1
                    totalac = totalac + LTB_CREDIT.Items(i)
                    LBL_TOTCRED.Text = totalac
                Next
                LBL_TOTCRED.Text = totalac
     
            ElseIf cc(NbValeurEncodee - 1) = 1 Then
     
                LTB_DEBIT.Items.RemoveAt(LTB_DEBIT.Items.Count - 1)
                For i = (LTB_DEBIT.Items.Count - 1) To 0 Step -1
                    totalad = totalad + LTB_DEBIT.Items(i)
                    LBL_TOTDEB.Text = totalad
                Next
     
                LBL_TOTDEB.Text = totalad
     
            End If
            NbValeurEncodee -= 1
            ReDim Preserve cc(NbValeurEncodee)
     
        End Sub
     
    End Class

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut list box toujours
    hello
    cette fois ci cela marche
    plusieurs petites questions

    le cc()que tu déclares sous Public Class Form1 est bien un tableau dont tu ne précises pas le nombre de case
    puis à la form load tu l'initie à cc(0) c'est à dire un tableau d'indice 0 donc contenant une seule valeur et après quand tu cliques sur le bouton écrire que ce soit en crédit ou en débit et qu'à la fin de écrire en crédit ou écrire en débit tu mets cc(NbValeurEncodee) = 0 ou 1 ton tableau est toujours à une valeur et le 0 ou le 1 tu le mets dans la case d'indice 0 et ce n'est que quand tu vas sortir du bouton écrire que tu augmentes la NbValeur encodée de 1 donc le tableau devient un tableau d'indice 1 mais pouvant contenir deux valeurs en case 0 et en case 1
    et de même dans le bouton annuler tu diminues le nombre d'indice de 1 à chaque fois
    mais au début du bouton annuler tu disIf NbValeurEncodee < 1 Then Exit Sub c'est à dire NbValeurEncodée <1 c'est NbValeurEncodée =0 donc cc(0) a encore une case ????

    excuses moi de pinailler mais les tableaux et les indices ne sont pas vraiment faciles à comprendre

    paraailleurs pourrais tu m'indiquer un endroit ou trouver des exercices de vb.net avec des corrigés corrects??
    encore merci et dans l'attente de te lire

  10. #10
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    La manière dont j'ai déclaré et initialisé cc() est celle qui convient le mieux (même si ça marche aussi autrement, notamment comme je te l'avais proposé dans mon message d'hier 11h42).
    J'ai repris "les bonnes manières" dès lors que le code que tu avais produit sur mon conseil ne fonctionnait pas.

    Les bonnes manières, à propos des tableaux dynamiques sont :
    • Déclaration : Dim Tableau() As TypeDeDonnee
    • Initialiser sa taille (son indice max) avant la première affectation : Redim Tableau(IndiceMaximumEnCeMoment) ' Opération faite sur le Load du Form dans ton programme, mais ça aurait pu être ailleurs
    • En cours de travail, s'il faut agrandir ou réduire l'indice maximal : Redim Preserve Tableau(NouvelIndiceMaximum) ' ou Redim Tableau(NouvelIndiceMaximum) si on ne veut pas conserver les éléments présents jusqu'à ce NouvelndiceMaximum (en cas de réduction) ou jusqu'à l'lndiceMaximum précédent (en cas d'agrandissement).

    Une note sur la taille : Contrairement à d’autres langages, notamment ceux dérivé du C, en VB les éléments d'un tableau sont accessibles de l'indice 0 à l'indice MAXIMUM, celui indiqué lors de la déclaration (Dim) ou lors du redimensionnement (Redim). Par exemple, Dim T(5) réserve un tableau pour 6 éléments accessibles par les indices 0 à 5. Ainsi aussi, quand j'initialise Redim cc(0), je réserve un tableau pour 1 valeur accessible "par les indices 0 à 0" (comme tu le signales très justement dans ton message). A noter aussi (c'est ici mon erreur à propos de Count), c'est la propriété Lenght du tableau qui donne son nombre d'éléments et Lenght-1 donne son indice maximal. Si je t'avais suggéré cc.Lenght (au lieu de cc.Count) ...
    Mais ce n'est pas plus mal avec une variable gérée à cet effet : NbValeurEncodee.

    Pour ce qui est de ma gestion de mes agrandissements et/ou réductions, comme tu le remarques, j'agrandis le tableau d'un position après avoir affecté la dernière disponible (en fin de procédure pour n’écrire qu'une seul fois la ligne de code). En fait, je prépare la place pour le prochain encodage. Remarque que c'est déjà ce qui est fait avec Redim cc(0) dans le Form_Load : je prépare la place pour la première valeur qui sera encodée.
    Il découle de ce qui précède que le tableau à toujours une position disponible (qui ne contient rien de significatif pour notre algo.).
    C'est à cause de cette position "excédentaire" que, pour lire la dernière valeur encodée, j'utilise l'indice NbValeurEncodee-1.
    Lors de la suppression d'un ligne, je réduis le tableau d'une position. Au dernier indice accessible, se trouve l'info de la ligne qui vient d'être supprimée, c'est une info condamnée (soit ignorée, soit écrasée). En effet, si je supprime encore une ligne, je lirai la donnée à l'indice NbValeurEncodee-1 et si j'ajoute une ligne, je le ferai à l'indice NbValeurEncodee.
    Bien entendu, la variable NbValeurEncodee suit les variations de tailles du tableau (+/- 1), elle sert même à passer la valeur nécessaire à Redim.
    Attention, NbValeurEncodee contient bien le nombre de valeurs encodées (accessibles de 0 à NbValeurEncodee-1). Après l'initialisation Redim cc(0), NbValeurEncodee vaut toujours 0. Il y a alors une place disponible et 0 valeur encodée. C'est ainsi qu'après la suppression de toutes les lignes, NbValeurEncodee vaut 0. Elle vaut 0 quand on n’a rien encodé et quand on a tout effacé. Dans ces deux cas, il ne faut pas entrer dans le code de BT_ANNULER_Click.

    Pour ce qui des exercices avec corrigés, n'es-tu pas étudiants ? car dans ce cas, le mieux est de t'adresser à tes profs : ce sont eux qui savent quelles compétences ils visent pour leurs étudiants et quels sont les exercices, livres, documents, ..., utiles à cet effet.
    Je suis désolé n'avoir pas d'exercice à te proposer.
    Mais tu peux utiliser l'imagination ..., par exemple, dans la foulée de ton exercice actuel, tu pourrais créer une application de "Livre de caisse". Le livre de caisse enregistre les recettes et les dépenses d'une caisse sur 2 colonnes. Il y a un montant d'ouverture de caisse (le fond de caisse) et en fin de page (ou de journée) il y a un solde, (dit solde à reporter) qui devient le fond de caisse du lendemain. Les opérations de consultation de solde et de clôture peuvent être implémentée. L'application peut d'abord utiliser un tableau, plus tard elle pourra utiliser les fichiers. L'application peut être complexifiée à souhait, par exemple en gérant les différents modes de payement, sachant qu'un payement par carte ne peut être écrit en recette dans le livre de caisse, sauf s'il est aussitôt suivit de son écriture en dépense ... (cf.illustration ci-jointe)
    Images attachées Images attachées  

Discussions similaires

  1. [Débutant] Lier un radioButton à la valeur de l'item sélectionné d'une listBox
    Par Jean-Marc68 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 29/09/2014, 14h31
  2. radiobutton dans une listbox
    Par ola-oz dans le forum C#
    Réponses: 8
    Dernier message: 25/08/2010, 14h46
  3. RadioButton dans un listbox : IsEnable=False
    Par toss.net dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 31/01/2010, 17h46
  4. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  5. controle listbox avec radiobuttons
    Par gbardy dans le forum MFC
    Réponses: 2
    Dernier message: 28/08/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo