Modifier la deuxième colonne d'une listview. [Résolu]

KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 17:15 - Dernière réponse : KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention
- 23 sept. 2012 à 21:22
Bonjour,

Dans le but de simplifier un inventaire à l'aide d'un scanner de code barre, je créé un petit programme.

A chaque fois que je scanne un code barre, il m'ajoute la référence associé dans la listview, et dans la deuxieme colonne sa écris 1 (ce qui représente le nombre d'objet).

Quand je scanne un code qui est déjà dans la listview, sa ne rajoute pas la référence, je souhaiterai simplement modifier le 1 de la deuxieme colonne, en fesant colonne2 += 1 (en gros).

Mon problème est que je n'arrive pas à pointer vers cette colonne.

Quelqu'un pourrai t-il m'éclairer ?

Merci.

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            Dim mot_cherche = TextBox1.Text
            Dim fichier_lecture_1 = "BD.txt"
            Dim fso = CreateObject("Scripting.FileSystemObject")
            Dim fichier_lecture_2 = fso.opentextfile(fichier_lecture_1, 1, True)
            Do Until fichier_lecture_2.atendofstream
                Dim chaine = fichier_lecture_2.readline()
                If InStr(1, chaine, mot_cherche) > 0 Then
                    Dim d = ":" 'd=chaine début"
                    Dim Debut = InStr(1, chaine, d)  ' Position du <
                    Dim Fin = InStr(1, chaine, ".")   ' Position du <
                    chaine = Mid$(chaine, Debut + d.Length, Fin - Debut - d.Length)



                    Dim item1 As New ListViewItem(chaine.ToString, 0)
                    If ListView1.Items.Count > 0 Then
                        Dim foundItem As ListViewItem = ListView1.FindItemWithText(chaine.ToString, False, 0, True)

                        If Not (foundItem Is Nothing) Then
                            MessageBox.Show("existe")
                            'c'est ici que se ferai l'addition de la deuxieme colonne, du moins du détail de la deuxieme colonne.
                        Else
                            item1.SubItems.Add("1")
                            ListView1.Items.AddRange(New ListViewItem() {item1})
                        End If
                    Else
                        item1.SubItems.Add("1")
                        ListView1.Items.AddRange(New ListViewItem() {item1})
                    End If

                    ListView1.AutoResizeColumns(System.Windows.Forms.ColumnHeaderAutoResizeStyle.HeaderSize)
                    TextBox1.Text = ""
                End If
            Loop
            fichier_lecture_2.close()
            fichier_lecture_2 = Nothing
            fso = Nothing

        End If
    End Sub
Afficher la suite 

Votre réponse

22 réponses

KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 18:41
+3
Utile
Dim foundSubItem As ListViewSubItem = ListView1.FindItemWithText(chaine.ToString, False, 0, True).SubItems(1)
                            foundSubItem.Text += 1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de KcHeY
Utilisateur anonyme - 21 sept. 2012 à 21:00
+3
Utile
Si 'chaine' représente une ligne du fichier, tu peux écrire :
Dim separateur As String() = {":", "."}
Dim resultat As String = chaine.Split(separateur, StringSplitOptions.RemoveEmptyEntries)(1)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 23 sept. 2012 à 20:43
+3
Utile
Il y a ici un bout de code qui permet de passer en capslock.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 18:39
0
Utile
Ah ben c'est bon j'ai trouvé.
Merci
Commenter la réponse de KcHeY
Utilisateur anonyme - 21 sept. 2012 à 18:41
0
Utile
Bonjour,

Je doute encore que tu aies activé Option Strict dans les propriétés de ton projet. Enfin bref...

1 / Toute cette partie là :
 Dim fichier_lecture_1 = "BD.txt"
            Dim fso = CreateObject("Scripting.FileSystemObject")
            Dim fichier_lecture_2 = fso.opentextfile(fichier_lecture_1, 1, True)
            Do Until fichier_lecture_2.atendofstream
                Dim chaine = fichier_lecture_2.readline()


Peut être remplacé avantageusement par :
Dim meslignes As String() = IO.File.ReadAllLines("BD.txt")
For Each chaine As String In meslignes
    'traitement de la ligne ici
Next


2 / Utilise chaine.IndexOf plutôt que Instr (obsolète)

3 / Et pour incrémenter, tu pourrais faire comme ceci par exemple :
founditem.SubItems(1).Text = (convert.ToInt32(founditem.Subitems(1).text,Integer) + 1).tostring
Commenter la réponse de Utilisateur anonyme
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 18:45
0
Utile
Bonsoir banana

Je me douté que c'était la raison pour laquelle personne ne me répondais.
J'ai activé tout à l'heure les options que tu cite, et voyant toute ces erreurs je me suis apeuré (lol), comme je ne sais pas faire ce que je récupère, c'est pas facile à corriger..

Je vais essayer ce que tu m'as conseillé.

Merci
Commenter la réponse de KcHeY
Utilisateur anonyme - 21 sept. 2012 à 18:46
0
Utile
Les posts se sont croisés mais tu verras qu'en activant Option Strict, ta solution ne marchera pas. On pouvait incrémenter un string en vb6 (très permissif). On peut le faire encore en .NET apparemment mais mieux vaut prendre de bonnes habitudes.
Commenter la réponse de Utilisateur anonyme
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 18:57
0
Utile
Okok,

 If InStr(1, chaine, mot_cherche) > 0 Then
                    Dim d = ":" 'd=chaine début"
                    'Dim Debut = InStr(1, chaine, d)  ' Position du :
                    'Dim Fin = InStr(1, chaine, ".")   ' Position du .
                    Dim Debut = chaine.ToString.IndexOf(d)
                    Dim Fin = chaine.ToString.LastIndexOf(".")
                    chaine = Mid$(chaine, Debut + d.Length, Fin - Debut - d.Length)


Cela me retourne tout sans retirer le texte que je n'ai pas besoin.
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 18:58
0
Utile
Autant pour moi, j'avais déplacé une variable.
Commenter la réponse de KcHeY
Utilisateur anonyme - 21 sept. 2012 à 19:00
0
Utile
Je ne sais pas ce que contient ta chaîne en question. Il y a surement bien plus simple que tes 4 lignes de code pour extraire une malheureuse donnée.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 21 sept. 2012 à 19:02
0
Utile
Je voudrais pas casser ton moral mais Mid est aussi obsolète
Commenter la réponse de Utilisateur anonyme
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 20:09
0
Utile
Lol

Mon fichier contient ce genre de chose :

1H00969700447:BB Miel & Moutarde.
1H00969700448:BB Champagne.
1H00969700449:BB Curry.
1H00969700446:BN Camembert.
1H00969700445:BN Ancienne.
1H00969700444:BN Speculos.
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 21:08
0
Utile
Ah oui effectivement :) Merci banana c'est cool.
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 21:20
0
Utile
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            Dim mot_cherche = TextBox1.Text
            Dim meslignes As String() = IO.File.ReadAllLines("BD.txt")
            For Each chaine As String In meslignes
                'traitement de la ligne ici
                If InStr(1, chaine, mot_cherche) > 0 Then
                    Dim separateur As String() = {":", "."}
                    Dim resultat As String = chaine.Split(separateur, StringSplitOptions.RemoveEmptyEntries)(1)
                    Dim item1 As New ListViewItem(resultat.ToString, 0)
                    If ListView1.Items.Count > 0 Then
                        Dim foundItem As ListViewItem = ListView1.FindItemWithText(resultat.ToString, False, 0, True)

                        If Not (foundItem Is Nothing) Then 'l'item existe
                            Dim foundSubItem As ListViewSubItem = ListView1.FindItemWithText(resultat.ToString, False, 0, True).SubItems(1)
                            foundSubItem.Text += 1
                            'c'est ici que se ferai l'addition de la deuxieme colonne, du moins du détail de la deuxieme colonne.
                        Else
                            item1.SubItems.Add("1")
                            ListView1.Items.AddRange(New ListViewItem() {item1})
                        End If
                    Else
                        item1.SubItems.Add("1")
                        ListView1.Items.AddRange(New ListViewItem() {item1})
                    End If
                End If
            Next
            ListView1.AutoResizeColumns(System.Windows.Forms.ColumnHeaderAutoResizeStyle.HeaderSize)
            TextBox1.Text = ""
        End If
    End Sub


Voila je l'ai adapté à ta sauce :p par contre il me reste un InStr.
Si je le met sur un pc sans vb ça fonctionne pas c'est ça ?
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 21:23
0
Utile
J'ai des erreurs la dessus aussi du coup que j'ai activé les options

    Private Declare Function GetKeyState Lib _
"user32" (ByVal nVirtKey As Long) As Integer
    Dim WshShell As Object
    Dim compteur As String
    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        TextBox1.Focus()
        If My.Computer.Keyboard.CapsLock = False Then
            WshShell = CreateObject("WScript.Shell")
            WshShell.SendKeys("{CAPSLOCK}")
        End If
    End Sub

    Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate
        If My.Computer.Keyboard.CapsLock = True Then
            WshShell = CreateObject("WScript.Shell")
            WshShell.SendKeys("{CAPSLOCK}")
        End If
    End Sub
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 21:26
0
Utile
    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        TextBox1.Focus()
        If My.Computer.Keyboard.CapsLock = False Then
            My.Computer.Keyboard.SendKeys("{CAPSLOCK}")
        End If
    End Sub

    Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate
        If My.Computer.Keyboard.CapsLock = True Then
            My.Computer.Keyboard.SendKeys("{CAPSLOCK}")
        End If
    End Sub
Commenter la réponse de KcHeY
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 21 sept. 2012 à 21:30
0
Utile
Ca fonctionne pas à tout les coups bizarre.
Commenter la réponse de KcHeY
Utilisateur anonyme - 22 sept. 2012 à 13:37
0
Utile
J'ai des erreurs la dessus aussi du coup que j'ai activé les options
Nous sortons ici largement du sujet
Commenter la réponse de Utilisateur anonyme
KcHeY 261 Messages postés dimanche 23 mai 2004Date d'inscription 22 septembre 2012 Dernière intervention - 22 sept. 2012 à 15:02
0
Utile
Yep c'est juste que je dois activer les majuscule quand le programme a le focus, sinon il n'envoi pas les chiffres mais les caractère qui y sont associé.
Commenter la réponse de KcHeY
Utilisateur anonyme - 22 sept. 2012 à 16:42
0
Utile
Pourquoi n'utilises-tu pas simplement la propriété CharacterCasing du textbox ?
textbox1.charactercasing = charactercasing.upper
Commenter la réponse de Utilisateur anonyme

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.

Modifier la deuxième colonne d'une listview. - page 2