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

Flex Discussion :

scrollbar dans un composant List


Sujet :

Flex

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut scrollbar dans un composant List
    Bonjour,

    j'ai un composant List qui affiche naturellement une scrollbar verticale...la liste est très souvent actualisée donc elle se remplit. Quand je clique sur le premier nom de la liste, la scrollbar descend de quelques centimètres ce qui fait que je vois plus le nom sur lequel j'ai cliqué.

    Il est vrai que lorsque je clique sur un nom, cela appelle un fonction qui réactualise la liste et je pense que c'est cela qui provoque le mouvement.

    Existe-t-il un moyen d'empêcher ce mouvement ?

    merci

  2. #2
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Salut viny,

    J'ai déjà rencontré ce problème et je l'ai résolu de cette manière :
    Juste avant de lancer ta fonction tu stockes ces deux informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    indexItemSelectionne = liste.selectedIndex;
    indexScrollBar = liste.verticalScrollPosition;
    Juste après avoir modifié les données de ta liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    liste.selectedIndex = indexItemSelectionne ;
    liste.verticalScrollPosition = indexScrollBar ;
    Voilà, avec ceci tout devrait fonctionner comme sur des roulettes
    Je suis là si tu as besoin d'informations supplémentaires

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    merci Toni,

    je prends un café car je suis naze en cherchant à régler ce problème de scrollbar et j'essaie ta soluce et je te tiens au courant !

    merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Zut ça fonctionne pas chez moi...

    La barre descend de quelques centimètres des que la liste est mise à jour et cela bien avant que je clique sur un élément de la liste...

    c'est vraiment très prise de tête la gestion des scrollbar dans Flex. Moi je lui demande de ne pas bouger seule et de rester là ou je la mets quoiqu'il arrive...et bien non Flex sait pas faire ça...

  5. #5
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    En fait je n'ai pas testé ma solution sur un composant List.
    Chez moi c'est sur une DataGrid qu'elle fonctionne. Mais j'étais quasiment sûr que ça fonctionnerait pour une liste

    Il faudrait que tu me montres la partie du code où tu déclares ton composant List et la fonction que tu appelles lors du clic sur un objet, ça me serait utile pour t'aider mieux

    Ici je quitte le boulot mais en rentrant je viens voir ce qu'il en est.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Le problème avec ta solution est que tu positionnes la scrollbar au niveau de l'élément sélectionné seulement quand je coulisse la barre et que je la relache elle se repositionne à l'endroit du dernier élément sélectionné.

    J'espère etre claire....

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    J'ai résolu le problème en plaçant un écouteur sur la liste qui détecte un événement de scroll; je récupère la valeur (position de la barre) que j'affecte ensuite à ma scrollbar (indexScrollBar) après avoir fait les modifs dans ma liste .

    Du coup elle ne bouge pas et reste à l'endroit où je la mets...

    merci à toi pour m'avoir mis sur la piste

  8. #8
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Salut viny,

    Content tu es résolu ton problème
    Comme je t'avais dit, j'ai testé sur une liste, et de chez moi ça fonctionne. En fait ça dépend de ce qu'on entend par actualisation de la liste. En tout cas, je poste quand même le code dont je te parlais et qui marche à merveille pour ceux qui en ont besoin et les curieux

    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
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" >
     
    	<mx:Script>
              <![CDATA[
     
                import mx.collections.*;
     
        		public static var i:int = 0;
     
                private var listeArray:Array = ["Objet 1","Objet 2","Objet 3","Objet 4","Objet 5","Objet 6","Objet 7","Objet 8"];
     
                [Bindable] private var listeCollection:ArrayCollection = new ArrayCollection(listeArray);
     
                private function ajouter():void
                {
                	var f:int = liste.selectedIndex;
                	var s:int = liste.verticalScrollPosition;
                	listeArray.push('New Objet ' + i++);
                	listeCollection.refresh();
                	liste.selectedIndex = f;
                	liste.verticalScrollPosition = s;
                }
     
             ]]>
        </mx:Script>
     
        <mx:Panel title="ScrollBar intelligente !">        
            <mx:List id="liste" dataProvider="{listeCollection}" width="100%" />
            <mx:LinkButton label="Ajouter" click="ajouter()" />
        </mx:Panel>
     
    </mx:Application>
    Et puis tant qu'à faire, voici le swf associé :

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    pour contribuer également je mets un peu de code pour ceux que cela intéresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                            private function ajoutEcouteur():void
    			{
    				this.list_buddies.addEventListener(ScrollEvent.SCROLL,placementScrollBar)
    			}
     
    			private function placementScrollBar(ScrollEvent:Object):void
    			{
    				//Alert.show(""+ScrollEvent.position);
     
    				parentApplication.indexScrollBar = ScrollEvent.position
    			}
    Merci !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/05/2013, 15h18
  2. Un composant liste les composants qui existent dans un form
    Par aliwassem dans le forum Composants VCL
    Réponses: 1
    Dernier message: 01/06/2010, 10h43
  3. rajouter scrollbar dans un composant!
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 3
    Dernier message: 23/05/2007, 15h59
  4. Réponses: 9
    Dernier message: 27/06/2006, 21h48
  5. [WD9] Non remplissage d'une liste dans un composant
    Par Romanops dans le forum WinDev
    Réponses: 3
    Dernier message: 06/04/2006, 17h05

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