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 :

flowlayoutpanel : maximum de controls dépassé


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 flowlayoutpanel : maximum de controls dépassé
    Bonjour à tous,

    je rencontre un problème avec un flowlayoutpanel winform.

    J'ajoute dynamiquement des controls à ce flowlayoutpanel mais malheureusement je dépasse le nombre maximum autorisé.

    J'ai donc réflechis à une solution et celle-ci se présenterais comme un affichage d'une tranche des controls à afficher :

    par exemple :
    ajout des controls 25 à 50 et affichage réel des controls 30 à 35.
    lorsque le control affiche réellement le control 45 je calcul la nouvelle tranche et remplace ce qui existe dans le flowlayoutpanel.

    Le problème vient donc du fait que je ne sais pas comment récupérer les control réelement affiché et visible par l'utilisateur.

    Auriez-vous une idée pour les récupérer?

    Merci pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour

    moi, la question que je me pose : que veux tu faire exactement ? (en dehors du choix du flow layout, etc...)

    Pour quel cas as tu ce besoin ?

    (Je pose naïvement la question car il y a peut-être de meilleurs solutions que le flowlayout).
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  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
    en fait je me fait un programme de gestion de bd (j'en ai presque un peu plus de 6.000)

    je ne souhaiterais pas de wpf car j'envisage de porter le programme vers mono pour linux.

    j'ai donc créer un control utilisateur qui affiche l'image de la couverture et des informations propre à la bd (en double, abimée ou non, en plusieur tome, ...)

    je souhaiterais maintenant avoir un control pour chaque bande dessinée et que ceux-ci se suivent verticalement pour créer une list des bds en ma posession...

    je pense que je pourrais également utiliser un panel et un vscrollbar (qui me servirait pour récupérer les index afficher) pour créer mon propre flowpanel....

    Sinon je suis ouvert à toutes suggestion et proposition.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonsoir

    vu le nombre de BD, j'opterais plutôt pour des options différentes genres :

    Datagridview ou bien un treeview ou listView et sur sélection d'une ligne (item) ==> affichage dans un usercontrol des informations.
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    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
    j'y ai pensé avant le flowlayoutpanel mais :

    je ne parviens pas à faire des items perso avec le listview ni gerer les subitems du listview
    je ne vois pas pourquoi utiliser un treeview vu que je ne compter pas créer de "groupe"
    pour le datagrid view, je n'aime vraiment pas la présentation...

    Pourquoi me conseils-tu de ne pas utiliser un flowlayoutpanel au vu du nombre de BD?

    Sinon une autre idée?

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    oui, ,le nombre de BD me fait penser que le flow est peut-être pas super adapté...

    Le ListView peut-être customisé pour avoir un "joli" affichage... (surcharge méthode Paint)...

    Pour le datagridView, il est vrai que j'utilise un composant Infragistics (payant hélas pour toi) qui permet d'afficher, trier, regrouper, etc.. assez facilement
    donc, j'en trouve les fonctionnalités très sympa.

    Je pense que le choix du controle doit être choisi en fonction de l'expérience utilisateur. Perso, (mais je ne suis pas à ta place bien sur), naviguer dans une liste
    de 6000 BD me semble juste trop énorme... j'aurais surement tendance, si je fais celà à :

    Faire un tri pour trouver ma bd, etc...

    Après, je pense qu'une solution "sympa" serait l'utilisation de code barre pour trouver les Bd, etc...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Pourquoi ne pas afficher tes éléments 25 par 25 si c'est la limite ? Tu fais un tri par ordre alphabétique et tu affiches à l'ouverture les 50 premiers. Avec un numericupdown qui permet de changer de page pour aller aux deuxième groupe de 25 etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int nombrePages = total / 25;
    int reste = total % 25;
    if(reste != 0)
    {
    nombrePages++;
    }
    Un truc comme ça..
    Après effectivement du point de vue utilisateur je ne vais pas chercher ma BD dans les 6.000 refs... Je m'attendrais à trouver une quelque chose qui me permet de filtrer sur le nom ou l'année ou l'auteur etc... ensuite libre à toi d'afficher ça dans ton flowlayoutpanel.

  8. #8
    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
    merci pour votre aide, mais je dois préciser que un classement se fait déjà par auteur, année de publication, état, ...

    le problème de limit de nombre (qui est de +/-350) survient lorsque je veux afficher toutes les BD via un filtre toutes ;-)

    mais je pense effectivement que le découpage s'avère nécessaire et de mémoriser la page actuelle via une variable locale...

    Je vais voir dans ce sens.

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    souvent la question pour les affichages "de grandes" listes de données que l'on peut se poser est :

    Ais-je vraiment besoin du détail quand je cherche dans toutes mes références une information ?

    Du coup, tu pourrais très bien avoir un mode d'affichage pour TOUTES les données, et un mode affichage dédié quand tu fais un tri et que tu as moins de données.

    Quoiqu'il en soit, le flowlayout, au delà de 50 ou 100 contrôles, je pense qu'il n'est pas adapté en terme de performance... en règle générale, afficher beaucoup
    de controle dans une IHM coute cher en winforms donc, il vaut mieux se tourner vers les composants qui sont optimisés pour celà (gridview, etc..)

    mais il est clair que quand il faut scroller, c'est chiant... c'est pour celà que le "paging" avec un datagridview me semble une approche pertinente !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  10. #10
    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
    bon, je me permet de relancer la discution car un je rencontre un problème avec mon usercontrol qui contient un unique flowlayoutpanel:

    Celui-ci n'affiche que les items réellement visible un peu comme le principe de Lead8209 par un system de pagination.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
     
    using MarkNet.Models;
     
    namespace MarkNet.UC.Domaines
    {
     
    	public partial class ucLstDom : UserControl
    	{
     
    		//Constante
    		private const int MOUSSEWHELLNBITEMS = 3;
    		private int _rangeItemsVues = 0;
    		private int _indexFirstItemShow = 0;
     
     
    		//propriétés
    		private List<Bd> _lstBd = null;
     
    		//constructeur
    		public ucLstDom()
    		{
    			InitializeComponent();
    			this.MouseWheel += new MouseEventHandler(UcLstDomMousseWheel);
    		}
     
    		//Méthode
    		public void SetListBd(List<Bd> lstBd)
    		{
    			if(lstBd.Count != 0)
    			{
    				this._lstBd = lstBd;
     
    				//On reset les valeurs dde l'ascenseur et position
    				this._rangeItemsVues = 0;
    				this._indexFirstItemShow = 0;
     
    				CalculItems(); //On recalul les valeurs concernant l'affichage
     
    				//On ajoute et affiche les items
    				AjoutItems(this._indexFirstItemShow = 0, this._indexFirstItemShow + this._rangeItemsVues);
    			}
     
    		}
     
    		public void CalculItems()
    		{
    			//calcul de la longueur des items vu en fct de la hauteur du control //nb = La hauteur du flp : la hauteur de l'item = à la plage visible
    			this._rangeItemsVues = (int)Math.Ceiling((double)(this.fLPListDomaines.Height / lstDomItem.LDIHEIGHT));
     
    			//3 cas 
    				// -> nb = 0  => On ne fait rien
     
    				// -> nb <= au nb possible à montrer => On affiche toute la liste et on masque l'ascenseur -> méthode d'ajout
     
    				// -> nb > au nb possible à montrer : On set l'ascenseur sur bas de la longeur réelle des la liste 
    			if (this._rangeItemsVues < this._lstDom.Count)
    				this.vSB.Maximum = this._lstDom.Count;
    		}
     
     
    		void AjoutItems(int firstShow, int lastShow)
    		{
    			// sécurité pour ne pas dépasser les index de la liste
    			if ( firstShow < 0 ) _indexFirstItemShow = firstShow = 0;
    			if (lastShow > _lstBd.Count) lastShow = _lstBd.Count; 
     
    			List<Bd> temp = _lstBd.GetRange(firstShow, lastShow); 
     
    			foreach (Bd d in temp)
    			{
    				lstBdItem it = new lstBdItem(d);
     
    				it.Name = d.Nom;
    				it.Margin = new Padding(0);
    				it.Anchor = AnchorStyles.Left & AnchorStyles.Top;
    				it.Width = fLPListBd.Width;
     
    				it.SelectionChanged += SelectionChangedfgh;
    				it.Click += ItemClicked;
     
    				this.fLPListBd.Controls.Add(it);
     
    			}
     
    		}
     
    		private void clean()
    		{
    			while(this.fLPListDomaines.Controls.Count != 0)
    			{
    				lstDomItem c = (lstDomItem)fLPListDomaines.Controls[0];
    				fLPListBd.Controls.Remove(c);
     
    				c.SelectionChanged -= SelectionChanged;
    				c.Click -= ItemClicked;
     
    				c.Dispose();
    			}
    		}
     
    #region Gestion evenement control
     
    		private void UcLstDomMousseWheel(object sender, MouseEventArgs e)
    		{
    			fLPListDomaines.SuspendLayout();
     
    			this.clean(); //On vide le flowpanel pour le refaire
     
    			if(e.Delta > 0 ) //On remonte
    			{
    				//Calul du nouveau range
    				_indexFirstItemShow = _indexFirstItemShow - MOUSSEWHELLNBITEMS;
    			}
    			else //On descend
    			{
    				//Calul du nouveau range
    				_indexFirstItemShow = _indexFirstItemShow + MOUSSEWHELLNBITEMS;
    			}
     
                            AjoutItems(_indexFirstItemShow, _indexFirstItemShow + _rangeItemsVues);
     
    			fLPListDomaines.ResumeLayout();
    		}
     
    }
    Bon ce code fonction presque comme je veux. En effet, il prend bien uniquement les items de bd à afficher mais il y a deux problèmes:

    1. Il y a un léger scintillement lorsque le control se rafraichit malgré le suspendlayout();
    2. L'évenement mouseWheel se déclenche à chaque fois que la roulette fait un cran de rotation. Coment peut-on gérer plusieurs tour de cran de roulette avant de recaluler et afficher le nouvel ensemble des items de Bd

    Merci pour votre aide

  11. #11
    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
    Existe-t-il un mode virtual sur le flowlayoutpanel comme pour la listview? ou comment peut-on envisager de le programmer?

Discussions similaires

  1. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par opensource dans le forum Débuter
    Réponses: 3
    Dernier message: 20/04/2011, 13h30
  2. FlowLayoutPanel dans un control composite/personnalisé
    Par Aukys dans le forum Windows Forms
    Réponses: 0
    Dernier message: 27/08/2009, 09h15
  3. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par ouadie99 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 01/09/2008, 10h03
  4. Réponses: 7
    Dernier message: 02/07/2008, 14h17
  5. [C#] Controle de saisie : Minimum et maximum de 3 caractères
    Par slideveloppeur2006 dans le forum Framework .NET
    Réponses: 5
    Dernier message: 15/04/2008, 11h34

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