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 :

ListView Item sélectionné.


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut ListView Item sélectionné.
    Bon je m'en sort pas avec ces Listview.... A peine une solution trouve qu'autre chose ne marche pas

    A l'ouverture du logiciel, voilà ce que je fais automatiquement.

    1 - Je créer les 3 listviews de façon basique (identique pour les 3 listView... seul le nom du listView change.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Form1.ListView1.View = View.Details
            Form1.ListView1.FullRowSelect = True
     
            Form1.ListView1.Columns.Add("", 25)
            Form1.ListView1.Columns.Add("Pays", 200)
    2 - Je récupère les données sur une BDD et je remplie le listview1 avec.
    3 - Je vais dans le registre récupérer une valeur. Avec cette valeur, je sélectionne l'item dans le listViem1 et je charge dans le listView2 les infos de la BDD en fonction de l'item sélectionné dans le litView1
    4 - Je vais dans le registre récupérer une valeur. Avec cette valeur, je sélectionne l'item dans le listViem2 et je charge dans le listView3 les infos de la BDD en fonction de l'item sélectionné dans le litView2
    5 - Je vais dans le registre récupérer une valeur. Avec cette valeur, je sélectionne l'item dans le listView3.
    6 - Je récupéré les valeurs des items sélectionné dans le Listview1-2 et 3 pour créer une chaîne qui est le nom d'une image et je l'affiche dans une picture box.

    Et c'est sur cette étape 6 que ce passe le souci.

    Voici le code de l'étape 6
    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
    Dim Item1 As String                          
            Dim Item2 As String                             
            Dim Item3 
            Dim Pic_Name As String                          
     
            Try
     
     
                Item1= Form1.ListView1.SelectedItems.Item(0).Text
                Item2 = Form1.ListView2.SelectedItems.Item(0).Text
                Item3 = Form1.ListView3.SelectedItems.Item(0).Text
     
                Pic_Name = Item1 & "_" & Item2 & "_" & Item3 & ".png"
     
                Form1.PictureBox_ES.Image = Image.FromFile(Application.StartupPath & "\Image\" & Pic_Name)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    Et lorsque je lance le code, à l'ouverture du logiciel j'ai la Msgbox qui me dit
    "Invalid Argument = La valeur (0) n'est pas valide pour index......."


    J'ai ajouté un bouton sur ma form,,,, et le code ci-dessous, je l'ai enlever du module de "Form1.load" et je l'ai appliqué à l'action du bouton... Et sa marche parfait. Hors moi, ce que je veux, c'est dès l'ouverture de la forme, une image.

    Alors j'ai modifié par

    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
     
    Dim Item1 As String                          
            Dim Item2 As String                             
            Dim Item3 
            Dim Pic_Name As String                          
     
            Try
     
                 If Form1.ListView1.SelectedIndices.Count <> 0 Then
                        Item1= Form1.ListView1.SelectedIndices(0)
                        MessageBox.Show(Item1.tostring)
                 End If
     
                'Item1= Form1.ListView1.SelectedItems.Item(0).Text
                'Item2 = Form1.ListView2.SelectedItems.Item(0).Text
                'Item3 = Form1.ListView3.SelectedItems.Item(0).Text
     
                'Pic_Name = Item1 & "_" & Item2 & "_" & Item3 & ".png"
     
                'Form1.PictureBox_ES.Image = Image.FromFile(Application.StartupPath & "\Image\" & Pic_Name)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    [/CODE]

    Et il se passe absolument rien....

    Avez vous une idée à me soumettre ?

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Et si tu mets des espions sur Pic_Name ,Item1, Item2 et Item3 et que tu exécutes au pas-à-pas, est-ce que toutes les valeurs obtenues son exactes ?

    Ou, si tu essaies comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim litem1 as LIstviewitem = Form1.ListView1.SelectedItems(0)
    item1=litem1.text

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut
    Bonjour.

    En essayant avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim litem1 as LIstviewitem = Form1.ListView1.SelectedItems(0)
    item1=litem1.text
    J'ai exactement le même problème... Invalid Argument.....

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Es-tu sûr que tes items sont vraiment sélectionnés ? S'ils sont vraiment sélectionnés, ils devraient être en surbrillance.

    Ou bien fais un pas-à-pas dans la section qui est supposée sélectionner tes items et fais un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print(listview1.selecteditems.count)
    Si tu a 0 comme réponse, c'est que tu n'as rien sélectionné

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut
    Et oui, ils sont bien sélectionné puisque j'ai ajouté un bouton qui rappèlle la fonction et lorsque je clique sur ce bouton ben la sa marche.

    On dirait presque que c'est un peu comme si en automatique sa va tellement vite que sa n'as pas le temps de charger les items avant de les sélectionner alors qu'avec le bouton a coté, c'est bouton. Assez surprenant.

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    @Clementmarcotte : S'il charge ses items dans son event Load et qu'il ne sélectionne rien ensuite il est clair que son Listview a perdu le focus et qu'aucun Listviewitem ne sont sélectionnés.
    De plus je serais curieux de savoir comment est paramétrée sa propriété MultiSelect ......

    @kitcarflo : Au regards du si peu d'éléments fournis ça ressemble à une vraie usine à gaz ton truc.... tu bosses sur une BDD et charges des éléments dans l'event Load ....... heureusement que tu n'as pas beaucoup de données sinon cela risque de geler côté UI....brefff....


    EDIT : bon maintenant nul besoin de faire ton cachottier si tu veux vraiment que l'on t'aide, postes ton projet au complet (sans la BDDbien sûre) ! Car là on ne cesse d'essayer de deviner comment tu as pu implémenter le reste .... c'est lassant de découvrir de nouvelles subtilités à chaque nouveau post rédigé.

    ++

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut
    alors 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
     
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
    'Mise en form pannel ES.
    Call Mise_en_forme_list_Track()         '<== MES_Form_ES
     
    End Sub
     
    Private Sub ListView_Pays_natif_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView_Pays_natif.DrawSubItem
            If e.ColumnIndex = 0 Then
                e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\RSSP\Image\Fiche ES\Drapeaux\" & e.SubItem.Text & ".png"), New Point(e.Bounds.X, e.Bounds.Y))
            Else
                e.DrawDefault = True
            End If
    End Sub
     
    Private Sub ListView_Pays_natif_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListView_Pays_natif.DrawColumnHeader
            e.DrawDefault = True
    End Sub
    Ensuite.

    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
     
    Public Sub Mise_en_forme_list_Track()
            'Appèlle les modules de création de mise en forme des listview
            Call Creer_listview_Pays_ES_native()        '<-- Creation ListView
            Call Creer_listview_ES_native()             '<-- Creation ListView
            Call Creer_listview_mode()                  '<-- Creation ListView
     
            Call Charge_liste_pays_natif()              '<-- BDD Choix ES
            Call dernier_pays_actif_natif()             '<-- BDD Choix ES
            Call load_Natif_track()                     '<-- BDD Choix ES
            Call Last_actif_track()                     '<-- BDD Choix ES
            Call Load_mod()                             '<-- BDD Choix ES
            Call Last_actif_mod()                       '<-- BDD Choix ES
     
            Call Show_Pics()
    End Sub
    Les déclarations des listView.

    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
     
    Public Sub Creer_listview_Pays_ES_native()
            'Creer le listView des ES native pour le choix des spéciales
            Form1.ListView_Pays_natif.View = View.Details
            Form1.ListView_Pays_natif.FullRowSelect = True
     
            Form1.ListView_Pays_natif.Columns.Add("", 25)
            Form1.ListView_Pays_natif.Columns.Add("Pays", 200)
     
        End Sub
     
        Public Sub Creer_listview_ES_native()
            'Creer le listView des ES native pour le choix des spéciales
            Form1.ListView_track.View = View.Details
            Form1.ListView_track.FullRowSelect = True
     
            Form1.ListView_track.Columns.Add("Spéciale", 220)
        End Sub
     
        Public Sub Creer_listview_mode()
            'Creer le listview des modes de surface pour les spéciales
            Form1.ListView_Mod.View = View.Details
            Form1.ListView_Mod.FullRowSelect = True
     
            Form1.ListView_Mod.Columns.Add("Mode", 220)
        End Sub
    'Et maintenant tous les modules de chargements

    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    Imports System.IO
     
    Module BDD_choix_ES
        'Module regroupant tout ce qui touche au base de donnée de la partie choix ES
     
        Public Sub Charge_liste_pays_natif()
            'Charge la liste des pays en spéciale native
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            Dim Paysbdd As String       'Pays sur la BDD
            Dim ID_country As String    'ID country
            Dim PaysList As String      'Pays sur le listview
            Dim Nb_occu As Integer      'Nombre d'occurence dans le listview
            Dim Ajout As Boolean        'Determine si on ajoute ou non l'item de pays
            Dim arr(1) As String
            Dim itm As ListViewItem
     
            Try
                conna.Provider = "Microsoft.Jet.OLEDB.4.0"
                conna.ConnectionString = Application.StartupPath & "\RSSP\Donnees\Tracks.mdb"
                conna.Open()
     
                sqla1.ActiveConnection = conna
                sqla1.CommandText = "SELECT * FROM Native_Tracks"
                orsa1.Open(sqla1)
     
                Form_ES.ListView_Pays_natif.Items.Clear()
     
     
                Do While Not orsa1.EOF
                    If IsDBNull(orsa1("Country").Value) Then   '<Nom de la colonne "Pays"
                        MsgBox("Pas de donnée Pays disponible" & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                               & "CPESM_001", MsgBoxStyle.Information, "Erreur RSSP 2018")
                        Exit Do
                    End If
     
                    Paysbdd = orsa1("Country").Value
                    ID_country = orsa1("ID_Country").Value
     
                    'Determine si le pays est existant ou non dans la BDD
                    Nb_occu = Form1.ListView_Pays_natif.Items.Count
     
                    If Nb_occu = 0 Then
                        arr(0) = ID_country
                        arr(1) = Paysbdd
     
                        itm = New ListViewItem(arr)
                        Form1.ListView_Pays_natif.Items.Add(itm)
                    Else
                        For i = 0 To Nb_occu - 1
                            PaysList = Form1.ListView_Pays_natif.Items(i).SubItems(1).Text
     
     
                            If PaysList = Paysbdd Then
                                Ajout = True
                                Exit For
                            Else
                                Ajout = False
                            End If
                        Next i
     
                        If Ajout = False Then
                            arr(0) = ID_country
                            arr(1) = Paysbdd
     
                            itm = New ListViewItem(arr)
                            Form1.ListView_Pays_natif.Items.Add(itm)
                        End If
                    End If
                    orsa1.MoveNext()
                Loop
     
                orsa1.Close()
                orsa1 = Nothing
                sqla1 = Nothing
     
                'fermer la BDD
                conna.Close()
                conna = Nothing
     
            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                    & "CPESM_002", MsgBoxStyle.Information, "Erreur RSSP 2018")
            End Try
     
        End Sub
     
        Public Sub dernier_pays_actif_natif()
            'Récupère dans le registre le dernièrs pays utilisé
            Dim pays_registre         'numéro du pays
            Dim i As Integer                    'balayage du listview pays
     
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            'Par defaut on charge le pays FRANCE = 1
            pays_registre = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Country", "1")
     
            For i = 0 To Form1.ListView_Pays_natif.Items.Count - 1
                If Form1.ListView_Pays_natif.Items(i).SubItems(0).Text = pays_registre Then
                    Form1.ListView_Pays_natif.Items(i).Selected = True
                    Form1.ListView_Pays_natif.Items(i).SubItems(1).ForeColor = Color.DarkRed
                    Form1.ListView_Pays_natif.Items(i).SubItems(1).BackColor = Color.YellowGreen
                Else
                    Form1.ListView_Pays_natif.Items(i).SubItems(1).ForeColor = Color.Black
                    Form1.ListView_Pays_natif.Items(i).SubItems(1).BackColor = Color.White
                End If
            Next i
     
     
        End Sub
     
        Public Sub load_Natif_track()
            'Load track about the last select Country
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            Dim Id_country As String             'Country ID
     
            Dim arr(1) As String
            Dim itm As ListViewItem
     
            Id_country = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Country", "1")
     
            Try
                conna.Provider = "Microsoft.Jet.OLEDB.4.0"
                conna.ConnectionString = Application.StartupPath & "\RSSP\Donnees\Tracks.mdb"
                conna.Open()
     
                Form1.ListView_track.Items.Clear()
     
                sqla1.ActiveConnection = conna
                sqla1.CommandText = "SELECT * FROM Native_Tracks where ID_Country='" & Id_country & "' ORDER BY Tracks ASC"
                orsa1.Open(sqla1)
                Do While Not orsa1.EOF
                    arr(0) = orsa1("Tracks").Value
     
     
                    itm = New ListViewItem(arr)
                    Form1.ListView_track.Items.Add(itm)
     
                    orsa1.MoveNext()
                Loop
     
                orsa1.Close()
                orsa1 = Nothing
                sqla1 = Nothing
     
                'fermer la BDD
                conna.Close()
                conna = Nothing
     
            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                    & "CPESM_003", MsgBoxStyle.Information, "Erreur RSSP 2018")
            End Try
     
        End Sub
     
        Public Sub Last_actif_track()
            'Gets in the register used the last track
            Dim ID_country As String                    'Id of the last country
            Dim Track_Name As String                    'Track Name
            Dim Track_registre As String                'Last ID track on Regedit
            Dim i As Integer
     
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            ID_country = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Country", "1")
            Track_registre = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Track", "")
     
            If Track_registre = "" Then
                Track_Name = ""
            Else
                Try
                    conna.Provider = "Microsoft.Jet.OLEDB.4.0"
                    conna.ConnectionString = Application.StartupPath & "\RSSP\Donnees\Tracks.mdb"
                    conna.Open()
     
                    sqla1.ActiveConnection = conna
                    sqla1.CommandText = "SELECT * FROM Native_Tracks WHERE ID_Country='" & ID_country & "' AND ID_Track='" & Track_registre & "'"
                    orsa1.Open(sqla1)
     
                    If orsa1("Tracks").Value Is System.DBNull.Value Then
                        Track_Name = ""
                    Else
                        Track_Name = orsa1("Tracks").Value
                    End If
     
                    orsa1.Close()
                    orsa1 = Nothing
                    sqla1 = Nothing
     
                    conna.Close()
                    conna = Nothing
     
                Catch ex As Exception
                    MsgBox(ex.Message & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                        & "CPESM_004", MsgBoxStyle.Information, "Erreur RSSP 2018")
                End Try
            End If
     
            If Track_Name = "" Then
                Form1.ListView_track.Items(0).Selected = True
                Form1.ListView_track.Items(i).SubItems(0).ForeColor = Color.DarkRed
                Form1.ListView_track.Items(i).SubItems(0).BackColor = Color.YellowGreen
     
                For i = 1 To Form1.ListView_track.Items.Count - 1
                    Form1.ListView_track.Items(i).SubItems(0).ForeColor = Color.Black
                    Form1.ListView_track.Items(i).SubItems(0).BackColor = Color.White
                Next i
            Else
                For i = 0 To Form1.ListView_track.Items.Count - 1
                    If Form1.ListView_track.Items(i).SubItems(0).Text = Track_Name Then
                        Form1.ListView_track.Items(i).Selected = True
                        Form1.ListView_track.Items(i).SubItems(0).ForeColor = Color.DarkRed
                        Form1.ListView_track.Items(i).SubItems(0).BackColor = Color.YellowGreen
                    Else
                        Form1.ListView_track.Items(i).SubItems(0).ForeColor = Color.Black
                        Form1.ListView_track.Items(i).SubItems(0).BackColor = Color.White
                    End If
                Next i
            End If
        End Sub
     
        Public Sub Load_mod()
            'Load mod for the selected Track
            Dim ID_Country As String            'ID last Country
            Dim ID_track As String              'ID Last track
            Dim Tarmac_mod As String
            Dim Gravel_mod As String
            Dim Snow_mod As String
            Dim Mix_mod As String
            Dim MT_mod As String
     
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            ID_Country = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Country", "1")
            ID_track = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Track", "")
     
            Try
                conna.Provider = "Microsoft.Jet.OLEDB.4.0"
                conna.ConnectionString = Application.StartupPath & "\RSSP\Donnees\Tracks.mdb"
                conna.Open()
     
                Form1.ListView_Mod.Items.Clear()
     
                sqla1.ActiveConnection = conna
                sqla1.CommandText = "SELECT * FROM Native_Tracks where ID_Country='" & ID_Country & "' AND ID_Track='" & ID_track & "'"
                orsa1.Open(sqla1)
     
                Tarmac_mod = orsa1("Tarmac").Value
                If Tarmac_mod = "Y" Then
                    Form1.ListView_Mod.Items.Add("Tarmac Mod")
                End If
     
                Gravel_mod = orsa1("Gravel").Value
                If Gravel_mod = "Y" Then
                    Form1.ListView_Mod.Items.Add("Gravel Mod")
                End If
     
                Snow_mod = orsa1("Snow").Value
                If Snow_mod = "Y" Then
                    Form1.ListView_Mod.Items.Add("Snow Mod")
                End If
     
                Mix_mod = orsa1("Mix").Value
                If Mix_mod = "Y" Then
                    Form1.ListView_Mod.Items.Add("Mix Mod")
                End If
     
                MT_mod = orsa1("Monte-carlo").Value
                If MT_mod = "Y" Then
                    Form1.ListView_Mod.Items.Add("Monte-Carlo Mod")
                End If
     
                orsa1.Close()
                orsa1 = Nothing
                sqla1 = Nothing
     
                'fermer la BDD
                conna.Close()
                conna = Nothing
     
            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                    & "CPESM_003", MsgBoxStyle.Information, "Erreur RSSP 2018")
            End Try
     
        End Sub
     
        Public Sub Last_actif_mod()
            'Gets in the register used the last mod
            'Gets in the register used the last track
            Dim Mod_name As String                      'Name of the last mod
            Dim ID_mod As String                        'Last id mode on regedit
            Dim i As Integer
     
            Dim conna As New ADODB.Connection
            Dim sqla1 As New ADODB.Command
            Dim orsa1 As New ADODB.Recordset
     
            ID_mod = GetSetting("RSSP 2018", Form1.L_num_pilote.Text & "-" & Form1.L_Pseudo_pilote.Text, "Mod", "1")
     
            If ID_mod = "" Then
                Mod_name = "Tarmac Mod"
            Else
                Try
                    conna.Provider = "Microsoft.Jet.OLEDB.4.0"
                    conna.ConnectionString = Application.StartupPath & "\RSSP\Donnees\Tracks.mdb"
                    conna.Open()
     
                    sqla1.ActiveConnection = conna
                    sqla1.CommandText = "SELECT * FROM Mod WHERE ID_mod='" & ID_mod & "'"
                    orsa1.Open(sqla1)
     
                    If orsa1("ID_mod").Value Is System.DBNull.Value Then
                        Mod_name = "Tarmac Mod"
                    Else
                        Mod_name = orsa1("Mod").Value
                    End If
     
                    orsa1.Close()
                    orsa1 = Nothing
                    sqla1 = Nothing
     
                    conna.Close()
                    conna = Nothing
     
                Catch ex As Exception
                    MsgBox(ex.Message & vbCrLf & "Erreur critique. Contacter l'équipe Rallyesim avec le code Erreur : " _
                        & "CPESM_004", MsgBoxStyle.Information, "Erreur RSSP 2018")
                End Try
            End If
     
            For i = 0 To Form1.ListView_Mod.Items.Count - 1
                If Form1.ListView_Mod.Items(i).SubItems(0).Text = Mod_name Then
                    Form1.ListView_Mod.Items(i).Selected = True
                    Form1.ListView_Mod.Items(i).SubItems(0).ForeColor = Color.DarkRed
                    Form1.ListView_Mod.Items(i).SubItems(0).BackColor = Color.YellowGreen
     
                Else
                    Form1.ListView_Mod.Items(i).SubItems(0).ForeColor = Color.Black
                    Form1.ListView_Mod.Items(i).SubItems(0).BackColor = Color.White
                End If
            Next i
     
        End Sub
     
        Public Sub Show_Pics()
            'Show the track choose
            Dim ID_country As String                            'Id country
            Dim Track As String                                 'Name of the track
            Dim Mode                                            'Mod choose
            Dim Pic_Name As String                              'Name of pic
     
            Try
     
                ID_country = Form1.ListView_Pays_natif.SelectedItems.Item(0).Text
                Track = Form1.ListView_track.SelectedItems.Item(0).Text
                Mode = Form1.ListView_Mod.SelectedItems.Item(0).Text
     
                Track = Replace(Track, " ", "-")
     
                Mode = Microsoft.VisualBasic.Split(Mode, " ")
                Mode = Mode(0)
     
                Pic_Name = ID_country & "_" & Track & "_" & Mode & ".png"
     
                Form1.PictureBox_ES.Image = Image.FromFile(Application.StartupPath & "\RSSP\Image\Fiche ES\Track\" & Pic_Name)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
    End Module
    Voila il y a tous le code.
    Dans les propriété des listView.....
    ListView_Pays_natif ==> MultiSelect : False - OwnerDraw = True
    ListView_track ==> MultiSelect : False - OwnerDraw = False
    ListView_Mod ==> MultiSelect : False - OwnerDraw = False

    L'érreur du code se situe sur la procédure "Show Pic".... Qui ne me renvoit rien.
    Comme j'ai dit plus haut,,,,, avec un bouton sur la Form qui rappèlle la fonction "Show Pics" ça marche !!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Call Show_Pics()
    End Sub

  8. #8
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    En effet une vraie usine à gaz...... :

    --> Supprimes Call ça ne sert à rien
    --> Simple suggestion car tu te rendras compte très bientôt (et je te le souhaite de tout cœur pour avancer) : préfères utiliser un contrôle ImageList pour ajouter des images dans tes listview au lieu de dessiner avec l'event DrawItem ainsi tu ne rencontreras pas de futurs soucis lié à l'InterThread !
    --> La création de tes Listview n'est pas dynamique alors il n'est pas nécessaire de créer des procédures (Creer_listview_Pays_ES_native(), Creer_listview_ES_native(),Creer_listview_mode()) , pour paramétrer les propriétés : .View, .FullRowSelect car tu peux les paramétrer directement depuis ta PropertyGrid de l'IDE et aussi ajouter tes colonnes directement !

    Bon à part ça :

    Tu places un point d'arrêt dans ta procédure Last_actif_mod() sur cette ligne et tu contrôles la valeur des 2 variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Form1.ListView_Mod.Items(i).SubItems(0).Text = Mod_name Then

    A+

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut
    Oki Wallace,,,

    Je vais regarder pour ImageList.... J'avais suivie le tuto de Mr Lasserre pour insérer les images. Comme je suis pas programmeur de métier... Je connais pas tout

    sinon, j'ai ajouté dans "Last_actif_mod"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                   Call Erreur_ID_track()
               End Try
            End If
     
            Dim pays As String = Form1.ListView_Pays_natif.SelectedItems.Item(0).Text
            Dim ES As String = Form1.ListView_track.SelectedItems.Item(0).Text
     
     
     
            For i = 0 To Form1.ListView_Mod.Items.Count - 1
                If Form1.ListView_Mod.Items(i).SubItems(0).Text = Mod_name Then
                    Form1.ListView_Mod.Items(i).Selected = True
    Avec un Arrêt sur le "For i = 0" afin de lire les Variables locales.

    Ce qu'il se passe, c'est que le programme me retourne aucune érreur. Il ne s'arrète pas comme il devrait, mais il continue en ne prenant pas en compte tout ce qui suis les lignes de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim pays As String = Form1.ListView_Pays_natif.SelectedItems.Item(0).Text
            Dim ES As String = Form1.ListView_track.SelectedItems.Item(0).Text
    Il shunte le reste du module "Last_actif_mod".... un peu comme du genre,,, j'arrive pas à trouver la valeur "Pays" et "ES",,, alors je laisse tomber ce module et continue mon chemin.....

    Donc il y a un souci la .....

  10. #10
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Le fonds de ma pensée concernant ton problème :

    le fait d'interroger une BDD est considéré comme un traitement long et pour pouvoir mettre à jour correctement la partie UI (tes contrôles) il faut utiliser du ThreadSafe.
    Ainsi il n'y aura pas de concurrence entre les différentes taches que tu demandes à ton programme d'effectuer : la récupération des infos dans ta BDD et la mise à jour du/des listview sont deux choses bien distinctes et il ne faut pas croire qu'en programmant en mode procédural (les procédures mises bout à bout) que tout va s’enchaîner sans problème et que tu t’affranchiras de toute la problématique du multithreading.

    Donc il il n'y a pas de recette miracle :

    Soit tu te contenteras d'appeler : Application.DoEvents un peu partout ou paramétrer CheckForIllegalCrossThreadCalls à True t pour redessiner/rafraîchir tes contrôles....... même pas dit que cela fonctionne.......
    soit tu te pencheras sur de vrais concepts :

    BackgroundWorker
    Task et Async/Await
    ...etc...

    Quoiqu'il en soit il y a du boulot.

    Bonne lecture et bon courage

    NB : Ta BDD est-elle lourde ? Le cas échéant communiques ton projet par MP je lookerais si tu veux

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 136
    Points : 78
    Points
    78
    Par défaut
    Et bien voilà tu m'a coulé avec des thermes trop compliqué pour un gars qui apprend par lui même la programmation .... mais je vois ce que tu veux dire,, enfin ta pensé. Effectivement, j'ai toujours fait du mode procédurale,, un après l'autre,,, et je n'ai jamais fait du Multi tache... Disons que je n'ai jamais eu le cas,, donc je ne m'y suis pas penché dessus.

    Concernant la BDD,, pour le moment j'ai 15 enregistrements.... Chaque enregistrement comprends 12 colonnes..... Mais a thermes la BDD fera dans les 150/200 enregistrements.

    Sinon,,, j'ai trouvé une solution cet après midi. C'est vraiment moche, mais sa marche.
    En fait,,, ces listViews sont sur un TabPage,,, et il y a 3 pages. Des informations sur chaque pages. La page 2 correspond au module que j'ai montré... Enfin une partie du module. Afin que l'opérateur est toujours une vue sur les sélections faites dans les listView, on a décidés d'inscrire les sélections dans des labels qui sont affiché sur la Form1.

    Donc a chaque chargement des listViews, lorsque je fais une sélection d'un items,, j'en profite pour inscrire la valeur dans un label. Ensuite, au lieu de lire la valeur sélectionné du listView pour affiché l'image, je vais lire les valeurs des Labels.

    J'en convient, c'est moche, mais pour le moment à défaut..........Mon problème est moitié resolu, puisque sa marche, mais la solution au problème n'est pas trouvé. Faut s'en contenter.

    En revanche Wallace, si tu sera disponible, un de ces jours pour que je te partage rapidement le projet que tu puisses nous faire des remarques dessus. Ce sera avec plaisir.

  12. #12
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par kitcarflo Voir le message
    ......
    ........
    J'en convient, c'est moche, mais pour le moment à défaut..........Mon problème est moitié resolu, puisque sa marche, mais la solution au problème n'est pas trouvé. Faut s'en contenter.

    En revanche Wallace, si tu sera disponible, un de ces jours pour que je te partage rapidement le projet que tu puisses nous faire des remarques dessus. Ce sera avec plaisir.
    Bonjour,

    Je comprends ta contrainte, s'il faut que ça fonctionne rapidement alors une alternative reste une solution comme une autre.

    N'hésites pas, si tu as besoin de retours et qui sait du même projet commenté en Orienté Objet.

    Diverses sortes de programmation

    Cdlt.

    NB : Débuter en vbnet grâce à Philippe Lasserre

    A+

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/10/2014, 15h32
  2. ListView - l'index de la colonne de l'item sélectionné ?
    Par glandu.dulac dans le forum Débuter
    Réponses: 4
    Dernier message: 07/06/2013, 09h57
  3. [Débutant] même item sélectionné sur 2 listView
    Par Markast dans le forum Windows Forms
    Réponses: 0
    Dernier message: 15/06/2012, 09h05
  4. Réponses: 0
    Dernier message: 08/08/2007, 21h26
  5. [C#]Listview et affichage de l'item sélectionné
    Par debug dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/05/2005, 14h34

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