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 :

Menu contextuel et problème d'affichage


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 87
    Points
    87
    Par défaut Menu contextuel et problème d'affichage
    Bonsoir à tous,

    J'ai dans une application en cours de développement un menu contextuel que je souhaite mettre à jour en fonction d'une List. Le code marche relativement bien à deux exceptions près.

    Le problème d'affichage est :
    1. Il m'affiche parfois deux fois le même element malgré le fait qu'il n'y en a qu'un
    2. il semblerait que le nettoyage ne se fait pas entièrement.

    le code utilisé est le suivant :

    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
     
    		private void mnuRecherche_TextChanged(object sender, EventArgs e)
    		{
    			CleanMenu();
     
    			Repertoire rep = App.AppIconed.Repertoire;
     
    			System.Collections.Generic.List<Personne> lst = rep.Search(mnuRecherche.Text);
     
    			ToolStripMenuItem mnua = new ToolStripMenuItem();
     
    			mnu.SuspendLayout();
     
    			for (int i = 0; i < lst.Count; i++)
    			{
    				mnua = new ToolStripMenuItem();
     
    				mnua.Text = lst[i].ShowForTel();
    				//mnua.Click += mnu_Click;
     
    				this.mnu.Items.Insert(i, mnua);
    			}
     
    			mnu.ResumeLayout();
     
    		}
     
    		private void CleanMenu()
    		{
    			for (int i = 0; i < this.mnu.Items.Count - 1; i++)
    			{
    				this.mnu.Items.RemoveAt(i);
    			}
    		}
    Auriez-vous une idée de comment résoudre ce problème lors de l'affiche et surtout lors de la recherche de l'élément?

    Merci

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par agparchitecture Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		private void CleanMenu()
    		{
    			for (int i = 0; i < this.mnu.Items.Count - 1; i++)
    			{
    				this.mnu.Items.RemoveAt(i);
    			}
    		}
    Ici tu as effectivement un problème. Il faut bien comprendre que Count ne te renvoi pas la même valeur à chaque itération, car tu supprimes un élément à chaque fois. De plus, à chaque suppression, l'ordre des éléments est modifié. Si tu supprimes l'élément à la position 2, le 3 devient le 2, le 4 let 3, etc...

    Bref, ici, il faut que :
    • tu copies la valeur de Count dans une variable avant la boucle, et que tu utilises cette copie pour itérer ;
    • tu supprimes les éléments, en commençant par le dernier (ainsi, tu ne modifies pas l'ordre des éléments restant). Variante : tu supprimes toujours le premier !


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		private void CleanMenu()
    		{
                            var count = this.mnu.Items.Count;
    			for (int i = 0; i < count - 1; i++)
    			{
    				this.mnu.Items.RemoveAt(0);
    			}
    		}
    Le premier problème que tu rencontres n'est certainement qu'une conséquence du second.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 87
    Points
    87
    Par défaut
    Oh l'erreur de débutant.... En plus c'est pas la première fois.... Ah programmer devant un bon film à la télé....

    Merci François ça marche parfaitement maintenant.

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    C'est bien un objet ToolStripItemCollection qui contient des MenuItem, non ? Elle possède une méthode Clear() pour supprimer tous les éléments, pourquoi ne pas l'utiliser ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2012, 17h15
  2. [JAVASCRIPT][MENU CONTEXTUEL] affichage
    Par mathieugamin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/11/2006, 21h46
  3. [IE] Problème d'affichage barre de menu
    Par Le Pharaon dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 23/06/2006, 16h11
  4. problème d'affichage d'un menu sur une image de fond
    Par Nata31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/06/2006, 07h53
  5. [Menu] Problème d'affichage après redirection
    Par Pfeffer dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2006, 21h04

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