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

C# Discussion :

Listview exception systématique après click sur un élément


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut Listview exception systématique après click sur un élément
    Bonjour,

    J'ai une listview et j'ai besoin de gérer un click sur un élément de la liste et aussi un click en dehors de la liste (zone vierge de la liste).

    J'utilise SelectedIndexChanged.

    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
     
            private void ListView_SelectedIndexChanged(object sender, EventArgs e)
            {
     
                    try
                {
     
                        Machin.Text = ListView.SelectedItems[0].Tag.ToString();
                    //plein de trucs à faire 
     
                }
                catch (System.ArgumentOutOfRangeException)
                {
     
                    //moult autres trucs à faire si click dans le vide 
     
                }
    }
    Le problème est qu'un click sur un élément valide de la liste déclenche successivement les DEUX évènements.
    D'abord cela lève l'exception et ensuite déclenche l'évènement valide.
    Comme si Listview avait besoin de désélectionner d'abord la ligne active (et de le faire savoir !) avant de sélectionner une autre ligne, en deux étapes automatiques.

    Merci pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Bonjour,

    C'est précisé dans la documentation, la collection SelectedIndices change à chaque fois que la propriété Selected d'un ListViewItem change ; l'événement SelectedIndexChanged sera appelé une fois pour chaque élément désélectionné puis une fois pour l'élément sélectionné s'il y en a un. Incidemment l'absence d'élément sélectionné au moment de l'événement est une situation normale que tu devrais vérifier explicitement (par les propriétés SelectedIndices ou SelectedItems) plutôt que de t'appuyer sur une Exception censée prendre en charge une situation anormale.

    Il existe également l'événement ItemSelectionChanged qui est levé dans les mêmes circonstances que SelectedIndexChanged (attention, si la ListView est en mode virtuel il faudra utiliser l'événement VirtualItemsSelectionRangeChanged). La différence est que l'EventArg reçu fournit également l'item, son index et s'il est sélectionné ou pas.

    Ensuite je ne sais pas exactement ce que tu as besoin de faire quand il n'y a pas d'item sélectionné, peut-être pour résoudre ton problème peux-tu regarder du côté des événements GotFocus et LostFocus pour obtenir la combinaison d'informations qui te permettront de faire ce que tu veux.

    Bon courage pour la suite.

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut
    Bonjour Noxen,

    Merci beaucoup pour ces explications et ces pistes.

    J'ai un formulaire dont les informations, boutons, listes et combo changent en fonction de ce qui est sélectionné (un élément ou pas d'élément).

    Tu as parfaitement raison, je ne devrais pas m'appuyer sur un évènement anormal pour gérer une situation considérée normale.

    C'est un principe général auquel je devrais faire plus attention.
    Ta remarque me fait réfléchir à plusieurs autres cas... pour lesquels je ne me creuse peut-être pas assez la tête pour savoir comment éviter une exception au lieu d'essayer de gérer la première qui se présente.

    Tout mon problème vient de là.

    en posant

    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
     
     
            private void ListView_SelectedIndexChanged(object sender, EventArgs e)
            {
                 if (ListView.SelectedItems.Count > 0)
                {
     
                         try
                     {
     
                        Machin.Text = ListView.SelectedItems[0].Tag.ToString();
                         //plein de trucs à faire 
     
                     }
                     catch (System.ArgumentOutOfRangeException)
                     {
                          //gère l'exception 
                      }
                }
                else
                {
                   //moult autres trucs à faire si click dans le vide 
                }
    }
    Je résous simplement mon problème.
    Merci encore pour avoir pris le temps de m'expliquer la mauvaise manière d'aborder ce genre de situation.

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

Discussions similaires

  1. [C#][.Net 2.0] donner focus à Combobox, après click sur treeview
    Par Harry_polin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/02/2006, 22h27
  2. [MySQL] Affichage de données après click sur liste déroulante
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/01/2006, 12h08
  3. [jTabbedPane] action apres click sur onglet
    Par tony_big_guy dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 01/12/2005, 23h29
  4. déclenchement d'un message box après click sur touche entrée
    Par new_wave dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/11/2005, 09h15
  5. Réponses: 2
    Dernier message: 26/07/2005, 15h35

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