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#] Form avec panel variable


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut [C#] Form avec panel variable
    Bonjour !

    J'ai développé une application dont je trouve que l'ergonomie pourrait être améliorée. En effet, je dispose d'une "main form" avec des boutons (le menu). Lors d'un clic sur un bouton, une dialog s'ouvre. J'ai remarqué que les applications typiques windows n'utilisent pas ce principe de pop-up.

    J'aimerais donc faire une fenêtre unique, avec un menu fixe sur le côté, et un panel à contenu variable occuperait le reste de la place. A chaque clic, le contenu du panel changerait selon l'option sélectionnée. Utilisant Visual Studio 2005, quel est le plus simple ? Suis-je obligé de tout coder à la main, pour faire apparaître/disparaître les contrôles ? (Mais alors dans l'assistant visuel, tout sera empilé pêle-mêle sur la form, un travail très impropre en somme...).

    Quelqu'un a-t-il une solution à ce problème ?


    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Il y a une autre solution

    Creer des contrôles dynamiquement dans ta Form.
    Pour cela il faut commencer par ajouter dans tes attributs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pour des Boutons
    ArrayList m_listBouton;
    Ensuite lorsque tu veux ajouter un Bouton, tu le crées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.Button bouton = new Forms.Button();
    Une fois que tu as tout rensigné sur le bouton:
    - Texte
    - Evenement associé au bouton

    Tu l'ajoutes a ta liste de bouton
    Et tu associe le bouton ajouté a ta Form.

    Mais le fait de tout créer dès le départ, et d'afficher/cacher a ta guise est de loin la plus facile...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    J'ai vu que lorsqu'on crée une form, on peut mettre BorderStyle à none. En gros, on peut avoir une fenêtre avec juste un panel, sans la barre de titre, etc.

    N'est-il pas possible "d'incruster" ce type de contrôle à l'endroit de mon panel principal ?

    Par exemple, je crée une form BorderStyle none, je mets un panel qui prend tte la fenêtre avec mes contrôles, les evenements etc sont gérés dans cette form même. Et je remplirais mon panel principal avec comme source celui là ?

    ----

    Autre question : quelle est la méthode "standard" pour gérer ce genre de cas ? Parce que définir tous les contrôles dès le départ de manière visuelle (bien plus simple) implique de superposer tout un tas de contrôles sur le même panel, quitte à ne plus s'y retrouver... Ou bien dans ce cas est-on obligé de se passer de l'assistant visuel et de recourir à la méthode manuelle ?

    Merci d'avance

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Ta solution parait intéressante 0xYg3n3, mais étant donné que j'ai pas mal de lignes de code dans chacun de mes dialogs (beaucoup de traîtement), j'aimerais garder ce découpage en différentes classes (ici en forms), afin de ne pas avoir une unique form énorme et difficile à maintenir.

    Une idée intéressante pourrait peut-être de créer des classes séparées, chacune héritant de Panel. Chaque classe définira ses propres contrôles, positions et évenements au sein de ce panel.

    Et au moment d'un clic sur le menu, la form principale instanciera le panel correspondant ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    J'étais en train de penser a quelque chose
    Et si l'utilisation de Tab pourrait solutionner ton problème.

    Par contre je ne sais pas si on peut cacher certains onglets d'une Tab.
    Ca peux être une excellente solution.

    A tester

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Oui très bonne idée en ce qui conerne le principe (les différents panels déjà présents).

    Avantage :
    - tous les panels sont gérés, il n'y a plus qu'à les remplir.

    Inconvénients :
    - la form principale sera énorme point de vue code.
    - il faudrait un principe similaire sans aucun bouton de tab. Je vais regarder de suite si c'est possible. Comme ça, un clic dans le menu ferait apparaître le tab correspondant, de manière transparente pour l'utilisateur.

    Une solution à méditer

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    OK j'ai trouvé un moyen de cacher les boutons des tabs en bricolant un peu (en plaçant un panel dessus :p) Ce n'est pas l'idéal mais celà fonctionne très bien.

    Un problème lié à l'utilisation des tabs est aussi qu'il faudra réinitialiser le contenu de chaque tab lors du prochain clic (pour éviter qu'un formulaire reste rempli lors de sa réouverture par la suite, par exemple).

    Pour ce qui est de la découpe, je peux toujours faire des méthodes statiques dans d'autres classes pour les gros traîtements.

    Ca peut fonctionner, mais j'ai toujours l'impression que c'est du chipotage, et je me demande bien quelle est la recette "officielle" ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    hophophop qu'est ce que je vois la O_o
    mais c'est quoi ce bricolage :O
    je pense qu'avec un ptite recherche sur le forum vous aurez trouvez la solution:
    J'ai trouvé ^^
    si jamais tu fait du C# alors le code de la classe c'est celui-ci (tester et approvez il marche tres bien, je l'utilise dans 2-3 applis):
    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
    using System;
    using System.ComponentModel;
    using System.Collections;
    using System.Drawing;
    using System.Windows.Forms;
     
     
        /// <summary>
        /// Summary description for SimpleTabControl.
        /// </summary>
        public class SimpleTabControl : TabControl
        {
            private bool simpleMode = false;
            [DefaultValue(false)]
            public bool SimpleMode
            {
                get { return simpleMode; }
                set
                {
                    simpleMode = value;
                    RecreateHandle();
                }
            }
            private bool simpleModeInDesign = false;
            [DefaultValue(false)]
            public bool SimpleModeInDesign
            {
                get { return simpleModeInDesign; }
                set
                {
                    simpleModeInDesign = value;
                    RecreateHandle();
                }
            }
            public override Rectangle DisplayRectangle
            {
                get
                {
                    if ((simpleMode == true) && (!DesignMode || simpleModeInDesign))
                    {
                        return new Rectangle(0, 0, Width, Height);
                    }
                    else
                        return base.DisplayRectangle;
                }
            }
        }
    Pour ce qui est de ton problème de vider les control alors soit tu fait des fonctions qui vide les control souhaiter mais si tu veut tout vider alors je te conseil de faire un parcours de la tabpage en question et de lui recuperer recursivement tout ses controls fils afin de les initialisé (selon leurs type).
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Je pensais qu'il était possible de cacher les onglets dans une Tab.
    Faut croire que non

    Heureusement que la communauté est importante.
    Donc l'utilisation du Tab était bel et bien la meilleur solution.

    M'enfin, il fallait le customiser

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Ah merci c'est intéressant ça :-)

    Le seul truc dommage, c'est qu'on ne puisse intégrer dans une form principale des panels se trouvant dans d'autres forms... Comme ça j'aurais une form par panel et tout les évenements liés, et à chaque clic de menu j'incruste le panel correspondant.

    Sinon il nous reste la solution là qui est valable, sans toutefois être parfaite...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Comme le sujet paraît plutot bien parti, on va encore un peu laisser mijoter, étant donné que pas mal de bonnes idées - même sous-jacentes - en sont sorties !

    Ensuite y'aura plus qu'à appuyer sur

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public override Rectangle DisplayRectangle
    {
        get
        {
            return new Rectangle(0, 0 , Width, Height);
        }
    }
    Allez hop plus d'onglet.
    Excellent

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Je crois que nous tenons une solution acceptable cette fois-ci

    Va pour cette dernière, d'autres existent, mais celle-ci présente beaucoup d'avantages, notamment un support au niveau visuel (contrairement à la méthode "par classes avec héritage de panel")

    Merci à tous !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/05/2011, 09h14
  2. récupérer document.form. avec variable
    Par ekremyilmaz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/06/2009, 19h31
  3. Envoi d'un mail mis en forme avec données variables
    Par eti_lac dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/11/2007, 15h53
  4. Réponses: 2
    Dernier message: 03/11/2007, 11h24
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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