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 :

Reproduire une interface à base de TabControl, possible ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Par défaut Reproduire une interface à base de TabControl, possible ?
    Bonjour à tous,

    La question peut paraître bête mais je n'arrive pas à trouver de réponse à mon problème.

    Je souhaiterai faire une application dont le contenu du formulaire peut varier. Mais je ne vois pas du tout comment faire ça.
    Imaginons la chose suivante : j'ai une application qui me sert à faire une liste de recettes de cuisines. J'ai plusieurs fonctionnalité à ma disposition.
    • J'ai une liste d'ingrédients disponibles avec un peu de blabla pour chacun. Ici, on a une interface de type explorateur avec à gauche la liste des ingrédients par catégories et à droite, l'info sur l'ingrédients choisi;
    • Une liste des recettes déjà créées. Là encore, on a une interface de type explorateur;
    • Un module pour créer une nouvelle recette. Cette fois, l'interface se veut classique avec des contrôleurs de types textbox et picturebox.


    A part en utilisant un système d'onglets, comment je peux faire ça pour qu'un appuie sur le bouton d'un menu m'affiche le bon "module" ?
    Afficher un formulaire à l'intérieur du formulaire ? Sans faire de MDI ?

    Jouer avec des panels que l'on cache / affiche en fonction du module choisi ? Ca risque d'être le foutoir.

    Utiliser un TabControl dont je cache les onglets pour appeler chaque panel via un bouton ?

    En gros, existe-t-il un moyen d'avoir le même comportement qu'un TabControl (plusieurs interfaces accessibles) sans utiliser de TabControl. D'autant plus que le TabControl gère mal le redimensionnement alors je préfère d'autant plus l'éviter.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Tu peux aisement simuler du MDI en créant dans chaque forme un Panel principal (appelons-le MovingPanel) avec Dock=DockStyle.fill dont tu modifiera le Parent pour l'affecter à un container de ta Main form.

    Par exemple, au TabPage d'un TabControl ou bien en le simulant par des panneaux de ta MainForm que tu rendras visible/invisible en fonction de boutons radio. C'est possible aussi via un menu.

    Si tu veux encore mieux, c-à-d des formes "détachables", bien rangées dans leur TabControl ou détachées ce qui permet de voir plusieurs formes en même temps.
    Regarde dans cette discussion la solution proposée.
    (Bien qu'il s'agisse d'un forum Delphi, il expose une solution développée C#).

    Graffito :Je vous propose la solution qu'on a adopté en C# (moins de 3 jours de devpt pour une unité dédiée à la gestion des "formes détachables" ) , mais qui peut parfaitement se transposer en Delphi:

    On définit une forme principale composée d'un tabsheet ou pageControl.
    On crée autant de formes applicatives avec un panel contenant tous les composants.
    On attache chaque panel "applicatif" aux pages du tabsheet de la forme principale et on rend leur forme d'origine invisible.
    On prévoit la possibilité de détacher ces panels vers leur forme initiale en faisant un genre de "glisser-déplacer" sur la barre d'onglet (cela fait apparaitre la barre du haut de la forme d'origine au dessus des onglets du tabsheet et cette barre récupère le curseur ce qui permet de déplacer la forme dans le même mouvement).
    Aprés détachement, on peut aussi réintégrer les formes applicatives dans son onglet en "fermant" la forme applicative ou en faisant le glisser-dépacer inverse
    On combine ainsi le bon ordonnacement apporté par les onglets et la possibilité de voir simultanément 2 (ou n) formes "applicatives" de l'appli.
    http://www.developpez.net/forums/sho...achable&page=3


    J'ai mis une demo et du source C# au message 34 de cette discussion.

  3. #3
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Ton lien ne marche malheureusement pas...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre confirmé Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Par défaut
    En effet, le lien ne fonctionne pas.

    Mais je vais voir ce que je peux faire avec les infos que tu m'as donné.
    Merci.

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Tu peux déjà commencer par faire des UserControl, pour chacun de tes modules. Tu pourras alors aisément les afficher / les masquer selon le scénario que tu auras choisi.

    Et puis ça permet, déjà, de bien séparer le code

  6. #6
    Membre confirmé Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Tu peux déjà commencer par faire des UserControl, pour chacun de tes modules. Tu pourras alors aisément les afficher / les masquer selon le scénario que tu auras choisi.

    Et puis ça permet, déjà, de bien séparer le code
    Oui, c'est aussi une bonne idée, merci.
    D'autant plus que j'apprends en autodidacte donc je n'ai pas de méthode ou de bonnes habitudes et que je fais des projets un peu "à l'arrache" pour l'instant.

    J'ai lu 2-3 trucs sur le développement en couches que je vais sûrement suivre mais il est vrai que je ne sais pas comment faire pour qu'une application soit "propre" dans l'organisation de sa solution et de ses ressources. Donc toutes les remarques comme la tienne sont bonnes à prendre.

  7. #7
    Membre confirmé Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Par défaut
    Je voulais tester la solution de Graffito mais comme je n'arriver pas à retrouver la discussion et que le lien ne fonctionne malheureusement pas, j'ai besoin d'un petit coup de main pour voir si j'ai bien compris son explication.
    A noter que je ne souhaite pas rendre mes formulaires détachables car je n'en ai pas l'utilité.

    Si j'ai tout compris, il faut que je suive la démarche ci-après :
    1. Je crée un projet dont le formulaire sera le formulaire principale de mon application. Appelons ce projet principal PP et ce formulaire principal FP.
    2. Dans ce formulaire, je mets au moins un conteneur (Un panel ferait l'affaire ?) pour qu'il accueille le future contenu de mon application et j'ajoute les éléments de navigation dont j'ai besoin.
    3. Pour chaque module applicatif (que nous appellerons MA), je crée un nouveau projet (que nous nommerons PS pour Projet Secondaire) dont le formulaire (nommé cette fois FS pour Formulaire Secondaire) accueillera le contenu du MA.
    4. Une fois ce MA terminé, je rends le FS associé invisible.
    5. Je map sur les éléments de navigations de mon FP un événement qui va remplir le conteneur du FP avec le contenu d'un FS.


    Mais plus grosses interrogations sont :
    • Dois-je vraiment créer un nouveau projet pour chaque module ? Ca me semble bien pour la séparation du code. Vos avis ?
    • Comment doit faire pour dire que le contenu d'un FS dois venir remplir le conteneur de mon FP ? Je ne vois pas du tout là.

  8. #8
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Tu n'es pas obligé de créer un nouveau projet pour chaque module, tu pourrais commencer par créer un UserControl par module.
    Tu pourras mettre tes UserControl directement sur ton formulaire principal.

    Créer un nouveau projet pour un module seulement et seulement si celui-ci sera amené à être utilisé par une autre application, sinon ça n'en vaut pas la peine.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  9. #9
    Membre confirmé Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Par défaut
    Ok pour les UserControl.
    Ce qui me gène avec cette méthode, c'est l'utilisation de l'éditeur graphique.
    Si j'empile les UserControl dans mon formulaire principale, je risque de lutter un peu quand j'aurai une modification à faire non ?

    Il y a peu être une option que je ne connais pas qui peut m'arranger ça ?

  10. #10
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Effectivement, si tu empile, ça va être galère.

    Alors pourquoi les empiler ?

    Ne peux-tu pas faire un UserControl pour chaque état du module par exemple ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2011, 13h46
  2. Réponses: 4
    Dernier message: 05/05/2008, 11h43
  3. [ODBC] Sécuriser une base de données Access via une interface en PHP
    Par maraly dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/08/2007, 08h49
  4. Réponses: 7
    Dernier message: 08/03/2004, 15h30

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