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

Windows Forms Discussion :

[C#] monter / descendre items listbox


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut [C#] monter / descendre items listbox
    Bonjour,

    tout est dans le sujet, j'ai deux boutons un monter, un descendre je voudrais descendre ou monter le contenu de l'item selectionné...

    merci !

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Après quelques essais, j'ai ceci qui fonctionne :
    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
        private void buttonDescendre_Click(object sender, EventArgs e)
        {
          if (listBox1.SelectedIndex < listBox1.Items.Count-1)
          {
            int vIndex = listBox1.SelectedIndex;
            object vTemp = listBox1.SelectedItem;
            listBox1.Items.RemoveAt(vIndex);
            listBox1.Items.Insert(vIndex + 1, vTemp);
            listBox1.SelectedIndex = vIndex + 1;
          }
        }
     
        private void buttonMonter_Click(object sender, EventArgs e)
        {
          if (listBox1.SelectedIndex > 0)
          {
            int vIndex = listBox1.SelectedIndex;
            object vTemp = listBox1.SelectedItem;
            listBox1.Items.RemoveAt(vIndex);
            listBox1.Items.Insert(vIndex - 1, vTemp);
            listBox1.SelectedIndex = vIndex - 1;
          }
        }
    Y-a mieux ?
    Car je n'ai pas trouvé de methode dans le genre Exchange dans la classe collection... c dommage..
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    salut,

    ça fonctionne très bien ! en effet moi aussi je cherchais à utiliser exchange ...
    en fait je viens de penser à ça : les données contenu dans ma listbox sont dans une collection. si je fais la montée ou la descente dans la collection que j'efface la totalité de ma listbox et la rafraichi pour réaffiché la nouvelle collection trié le résultat sur la listbox sera le même il me semble (que le monter/descendre que tu viens de proposer), or c'est plus intéréssant de faire comme ça puisque derrière j'effectue d'autres traitements avec cette collection et si celle si est trié (à la convenance de l'utilisateur via monter / descendre) se sera mieux. Est-il possible de faire cela ?

    j'ai déja mes fonctionné d'affichage, de rafraichissement... il me manquerait le fait de changer la position dans la collection.


    merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    je relance

    comment ranger la collection dynamiquement en fonction du choix utilisateur (monter / descendre)

    merci de m'éclairer

  5. #5
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    A vrai dire, je ne comprends pas trop la question
    les données contenu dans ma listbox sont dans une collection. si je fais la montée ou la descente dans la collection que j'efface la totalité de ma listbox et la rafraichi pour réaffiché la nouvelle collection trié le résultat sur la listbox sera le même il me semble (que le monter/descendre que tu viens de proposer), or c'est plus intéréssant de faire comme ça puisque derrière j'effectue d'autres traitements avec cette collection et si celle si est trié (à la convenance de l'utilisateur via monter / descendre) se sera mieux.
    Erreur: Identificateur "la" non déclaré.
    Erreur: Phrase trop longue.


    Désolé, mon compilo est assez limité
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    lol !

    autant pour moi ! reprenons !

    j'ai une listbox dans laquelle j'affiche des informations. Ces informations viennent d'une saisie utilisateur. Jusque là tout va bien. L'ordre dans lequel ces informations sont affichées dépend de l'ordre de saisie. Je donne la possibilité à l'utilisateur de modifier cet ordre d'affichage dans la listbox via un bouton monter / descendre. Seulement cette option affecte uniquement l'affichage de la listbox hors les données saisies par l'utilisateur (qui s'affichage une fois validé dans la listbox) sont dans une collection. je voudrais donc au lieux de trier les éléments dans ma listbox les trier dans ma collection directement


    Exemple :
    1ere saisie : Bonjour (validation)
    2eme saisie : Au revoir (validation)

    Ma collection contient donc :

    Collection[0]:Bonjour
    Collection[1]:Au revoir

    Affichage de la listbox :
    Bonjour
    Au revoir

    Si je clique pour faire monter Au revoir au dessus de Bonjour, je voudrais en fait ranger ma collection de cette façon :
    Collection[0]:Au revoir
    Collection[1]:Bonjour

    nouvelle affichage de la listBox :
    Au revoir
    Bonjour

    J'ai toutes mes méthodes pour afficher, rafraichir la listbox etc, il me manque uniquement la façon de procéder pour "ranger" la collection suivant le choix de l'utilisateur.

    j'espère avoir été plus clair. Merci !

  7. #7
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    ok pour tout ce qui touche de pres ou de loin le databinding tout changement doit se faire a la source donc sur tes datatables ou tes collections.

    pour faire un sorting je te conseil d'utiliser comme source une datatable et t'appliquer le sorting dessus ou alors d'utiliser une sortedlist "system.collection"

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    salut !

    ça m'embête un peu si j'utilise sortedList je vais devoir tout redéfinir mes collections etc non ?

    N'y a t-il pas une autre façon ?

    merci

  9. #9
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    est faire un sorting sur ta collection, ca pause probleme ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    voici une partie du code permettant la manipulation d'une de mes collections. Comment puis-je implanter un sorting la dessus ?


    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
    public class Class1
        {
            collectionCat MacollectionCat = new collectionCat();
            public collectionCat GetcollectionCat()
            {
                return MacollectionCat;
            }
        }
     
        public class ClassCat
        {
            int numero;
            string libelle;
     
            public ClassCat(int _num, string _libelle)
            {
                numero = _num;
                libelle = _libelle;
             }
            public ClassCat() { }
     
            public int GetNumero() { return numero; }
            public string Getlibelle() { return libelle; }
            public string GetCat() { return "Numero : " + numero + "  Libellé : " + libelle; }
     
        }
     
        public class collectionCat : System.Collections.CollectionBase
        {
            public void Ajout(ClassCat Cat)
            {
                List.Add(Cat);
            }
            public void Suppression(int position)
            {
                List.RemoveAt(position);
            }
            public ClassCat Selection(int position)
            {
                return (ClassCat)List[position];
            }
        }  
     
     
        //pour donner un exemple je manipule la collection de cette façon  à partir d'une form
     
        //instance
         Class1 Cl = new Class1();
         //exemple pour supprimer un élément de ma collection 
         Cl.GetcollectionCat().Suppression(position);
    merci beaucoup !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    juste un coup de pouce svp

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Et bien ... tu faits un algo bidon, du genre :

    Pour monter l'item qui est à la position X:
    0.5) Tu vérifies que tu n'es pas deja en haut du tableau (X!=0)
    1) Tu copies l'item (X) dans une variable (Y)
    2) Tu copies l'item (X-1) dans (X)
    3) Tu copies l'item (Y) dans (X-1)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    salut !

    l'algo bidon est fait pour les items sur la listbox mais je voudrais en fait effectuer cette manipulation directement sur la collection en question et non pas sur la listbox.


Discussions similaires

  1. monter descendre l'ascenceur
    Par pascb423 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/08/2009, 15h03
  2. Animation Items ListBox
    Par 1tsiMat dans le forum Silverlight
    Réponses: 6
    Dernier message: 25/05/2009, 12h57
  3. 2 items listbox même ligne
    Par gelwc dans le forum Excel
    Réponses: 2
    Dernier message: 01/09/2008, 09h41
  4. [VB.NET] récuperer item listbox !
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/07/2005, 16h38
  5. Récupération items listbox
    Par Fabiani dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 28/08/2003, 12h52

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