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 en vb.net


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut Listview en vb.net
    Bonjour,

    Je cherche quel evenement d'une listview permettrait lorsqu'on clique sur la listview dans une cellule (sur un subitems) de renvoyer le texte du subitem cliqué. Le code du renvoi n'est pas un problème. Par contre si on clique sur une autre case que celles de la colonne(0) (ou de la ligne (0)), rien ne se produit.

    Autrement dit, si je veux le texte de la cellule (n,m), au lieu de cliquer simplement sur cette cellule et renvoyer Listview.item(n).subitms(m).text , il faut que je clique sur la cellule (0,m) pour obtenir le n° de la colonne (m: le subitem), puis que je clique sur la cellule (n,0) pour obtenir le n° d'item (n) et là c'est pas tres ergonomique.

    QQun a une idee ?

    Merci

  2. #2
    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
    Grace au gestionnaire d'évènement "ItemSelectionChanged" de ton Listview :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Public Sub ListView1_ItemSelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged
            If e.IsSelected Then
                msgbox(e.item.subitems(1).text)
            End If
        End Sub
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci de ton aide, néanmoins qd tu clique sur la listview ailleurs que colonne (0)
    la procedure ne declenche pas l'evenement itemselectionchanged...
    ++

  4. #4
    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 riemp Voir le message
    Merci de ton aide, néanmoins qd tu clique sur la listview ailleurs que colonne (0)
    la procedure ne declenche pas l'evenement itemselectionchanged...
    ++
    Parce que tu n'as certainement pas paramétré ton contrôle Listview correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListView1.FullRowSelect = True
    EDIT : Dans la fenêtre des propriétés de ton contrôle ListView (en mode concepteur de vue) :


  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Whaa, evidement cela marche bien mieux forcement!!!!!!!!!!!!!!!

    Merci beaucoup, j'y avais passé des heures à essayer tous les événements, recherche dans cours,FAQ, forum,google avant de mettre cette discussion, pourquoi tu ne me l'as pas dit plus tot! ( lol bien sur )

    merci encore

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Je pensais savoir comment retourner le numéro de la colonne
    dans laquelle le click se fait, mais seul l'item (en fait 'row' ) et retourné,
    avec un code du style listview.selecteditem.column
    Mais j'y arrive Pas

    Can u help wallace1

    Merci

  7. #7
    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
    Partons du principe que tu as 3 colonnes dans ton Listview1 :

    Selon l'énoncé de ton problème :

    - Lors d'1 click sur l'item dans le Listview1 = Gestionnaire d'évènement : ListView1.MouseClick

    - Dans ce gestionnaire d'évènement tu utilises l'argument MouseEventArgs (e) afin de récupérer les coordonnées X Y du curseur de souris lors du click.

    - Tu travailles uniquement avec l'axe X (horizontalement) car le point du curseur de souris se situe dans des colonnes (verticales).

    - Pour savoir si ce click sur l'axe X est compris dans la plage des coordonnées d'une colonne ( < compris entre >) alors tu utilises la valeur de chaque largeur des colonnes =

    Si X supérieur à 0 et X inférieur à largeur colonne 1 alors afficher nom colonne 1

    Si X supérieur à largeur colonne 1 et X inférieur à (largeur colonne 1 + largeur colonne 2) alors afficher nom colonne 2
    ...etc.....

    Sachant que :
    - largeur colonne 1 = ColumnHeader1.Width
    - largeur colonne 2 = ColumnHeader2.Width



    -------> Voilà le code qui résume l'explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        Public Sub ListView1_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListView1.MouseClick
            If (e.Location.X > 0 And e.Location.X < ColumnHeader1.Width) Then
                MsgBox(ColumnHeader1.Text)
            ElseIf (e.Location.X > ColumnHeader1.Width And e.Location.X < ColumnHeader1.Width + ColumnHeader2.Width) Then
                MsgBox(ColumnHeader2.Text)
            ElseIf (e.Location.X > ColumnHeader1.Width + ColumnHeader2.Width And e.Location.X < ColumnHeader1.Width + ColumnHeader2.Width + ColumnHeader3.Width) Then
                MsgBox(ColumnHeader3.Text)
            End If
        End Sub
    A+

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    en complément des propositions de wallace1, "la méthode HitTest fournit des informations d'élément, à des coordonnées x et y données." (Dixit MSDN).
    A tester sur un événement exposant le paramètre "MouseEventArgs", comme vu sur le Net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub ListView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
     
            Dim info As ListViewHitTestInfo = ListView1.HitTest(e.X, e.Y)
            Dim lvi As ListViewItem = info.Item
            Dim lvis As ListViewItem.ListViewSubItem = info.SubItem
     
            If Not lvis Is Nothing Then
                If Not lvi Is Nothing Then
                    MessageBox.Show("Nom de l'Item ou du SubItem cliqué ; " & lvis.Text & ";  Column : " & lvi.SubItems.IndexOf(lvis).ToString)
                End If
            End If
     
        End Sub

  9. #9
    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
    Effectivement Chrismonoye ta proposition est plus propre.

    Donc riemp si tu veux récupérer le nom de la colonne de l'item cliqué alors il te faudra modifier cela dans le gestionnaire proposé par Chrismonoye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show("Nom de l'Item ou du SubItem cliqué ; " & lvis.Text & ";  Column : " & ListView1.Columns(lvi.SubItems.IndexOf(lvis)).ToString)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci guys,

    heureusement que vous avez accepté de m'aider, je n'y serais jamais arrivé tout seul, la solution de chrismonoye (tahitien chris?) me va bien: le contenu de la cellule + le numero de colonne, c'est super. Merci beaucoup aussi à toi wallace1 pour ton perfectionnisme.

    Comment connaissez vous les types de variable qui sont ici déclarées comme:

    dim info as ListViewHitTestinfo

    il y a t-il un breviaire qui decrit tout ça avec les explications? MSDN? cours ? tuto?

    Je laisse 'non resolu' pdt qques instants si vous pouvez repondre à ma derniere quest.


  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    C'est qd mm bizarre que Bill n'ait pas prévu ça comme propriete. M'enfin

  12. #12
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour riemp

    Le plus simple toujours .....est de prendre le temps de lire MSDN Doc...

    C'est HitTest qui le fait...avec MouseDown.
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
            Dim info As ListViewHitTestInfo = ListView1.HitTest(e.X, e.Y)
            MessageBox.Show(info.Location.ToString())
            MessageBox.Show(info.SubItem.Text)
     
        End Sub
    bon code....

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TextBox dans un listview en vb.net
    Par Cudiinho dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 21/02/2012, 12h46
  2. inserer bouton dans listview en vb net
    Par sihammaster dans le forum VB.NET
    Réponses: 0
    Dernier message: 01/02/2010, 10h45
  3. comment insérer un item dans listview en asp.net?
    Par tngtng dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/07/2009, 16h17
  4. Gestion des listview en VB.net
    Par CodeFacile dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/01/2009, 11h58
  5. [C#] Compostant ListView pour ASP.NET ?
    Par luimême dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2006, 08h38

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