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 :

Container idéal pour une gestion de notes en colonne ? [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut Container idéal pour une gestion de notes en colonne ?
    Bonjour,

    Alors voilà mon problème, je voudrais créer une application permetant de gérer des "notes" (chaque note sera un "userControl", qui en gros, contiendra une richTextBox et un label de couleur).
    Le truc, c'est que ces notes doivent s'afficher en colonne, toute les unes en dessous des autres, et qu'avec un drag&drop, on puisse prendre une note, pour la déplacer et l'insérer entre deux qui existent déjà.
    Le problème, c'est que je ne sais pas quel container utiliser pour faire quelque chose qui ressemble à ça.
    Dans l'idéal, ce serait une espece de grand tableau, et quand je lache ma note dans une case occupée, ca fait le décalage vers le bas.

    Pour info, il faudrait dans l'idéal pouvoir gérer de cette manière un historique de plusieurs centaines (milliers ?) de notes, je ne sais pas si ca peut influer sur le choix du container.

    Merci d'avance !

  2. #2
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Hello,

    Il y a effectivement plusieurs possibilités:
    - un FlowLayoutPanel avec le direction le FlowDirection réglé sur TopDown. Attention, si ton panel est trop large, il me semble qu'il va automatiquement afficher tes controls sur plusieurs colonnes
    - un TableLayoutPanel, avec une seule colonne, et une ligne pour chacun de tes controls. Attention à bien spécifier les hauteurs de chaque ligne, sinon l'affichage va vite devenir très laid.

    Cependant, etant donné la quantité de données que tu prévois de traiter, je pense qu'un DataGridView serait mieux adapté. Avoir des centaines de controls dans un panel me semble risqué en termes de performances.

    A+!

  3. #3
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    En fait, j'avais prévu de placer un userControl dedans... visiblement, le DataGridView sert plutôt à des données brutes non ?
    (si tu as un lien vers un tuto un peu sympa, j'suis preneur, je galère un peu là ^^)

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    BONJOUR Rakken.
    La seule solution envisageable c'esr un custom panel avec override de la methode LayoutEngine.
    voici un exemple de custom panel de la MSDN doc(Rubrique :How to: Implement a Custom Layout Engine) :

    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
     
     
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.Layout;
     
    // This class demonstrates a simple custom layout panel.
    // It overrides the LayoutEngine property of the Panel
    // control to provide a custom layout engine. 
    public class DemoFlowPanel : Panel
    {
        private DemoFlowLayout layoutEngine;
     
        public DemoFlowPanel()
        {
        }
     
        public override LayoutEngine LayoutEngine
        {
            get
            {
                if (layoutEngine == null)
                {
                    layoutEngine = new DemoFlowLayout();
                }
     
                return layoutEngine;
            }
        }
    }
     
    // This class demonstrates a simple custom layout engine.
    public class DemoFlowLayout : LayoutEngine
    {
        public override bool Layout(
            object container,
            LayoutEventArgs layoutEventArgs)
        {
            Control parent = container as Control;
     
            // Use DisplayRectangle so that parent.Padding is honored.
            Rectangle parentDisplayRectangle = parent.DisplayRectangle;
            Point nextControlLocation = parentDisplayRectangle.Location;
     
            foreach (Control c in parent.Controls)
            {
                // Only apply layout to visible controls.
                if (!c.Visible)
                {
                    continue;
                }
     
                // Respect the margin of the control:
                // shift over the left and the top.
                nextControlLocation.Offset(c.Margin.Left, c.Margin.Top);
     
                // Set the location of the control.
                c.Location = nextControlLocation;
     
                // Set the autosized controls to their 
                // autosized heights.
                if (c.AutoSize)
                {
                    c.Size = c.GetPreferredSize(parentDisplayRectangle.Size);
                }
     
                // Move X back to the display rectangle origin.
                nextControlLocation.X = parentDisplayRectangle.X;
     
                // Increment Y by the height of the control 
                // and the bottom margin.
                nextControlLocation.Y += c.Height + c.Margin.Bottom;
            }
     
            // Optional: Return whether or not the container's 
            // parent should perform layout as a result of this 
            // layout. Some layout engines return the value of 
            // the container's AutoSize property.
     
            return false;
        }
    }
    A toi de l' adapter à tes besois en rajoutant la fonctionnalité drag drop...

  5. #5
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Nickel, je vais étudier ça !

  6. #6
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Bon finalement, la solution retenue à été d'utiliser wpf au lieu de windows form.
    Du coup, je me sers d'une listBox qui contient mes éléments, et visiblement ca tourne plutôt bien.
    Merci à tous ^^
    (Et je vais ouvrir une nouvelle discution pour mon nouveau problème ^^)

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

Discussions similaires

  1. quel langage pour une gestion de devis ?
    Par Morvion dans le forum Débuter
    Réponses: 6
    Dernier message: 19/08/2008, 13h34
  2. Quel langage pour une gestion des stocks-client-caisse ?
    Par plex dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 07/04/2007, 18h56
  3. Réponses: 6
    Dernier message: 01/03/2007, 09h43
  4. Quel SGBD choisir pour une gestion clientèle ?
    Par kurkaine dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 06/10/2005, 13h14
  5. Idées pour une gestion de droits d'accès a des Forms ?
    Par sfxElrick dans le forum Composants VCL
    Réponses: 17
    Dernier message: 26/01/2005, 16h00

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