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

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    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 éminent 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
    Points : 7 903
    Points
    7 903
    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.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    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 régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    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 émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    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 régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    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 émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Sans même parler de développement en couches, développer des modules encapsulés force déjà à définir des objets ayant chacun un rôle bien défini, présentant en public ses fonctionnalités et masquant en private / protected sa machinerie interne.

    Ça évite de se retrouver avec un plat de spaghettis avec des variables globales de la mort et des classes monstrueuses illisibles
    ಠ_ಠ

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ça évite de se retrouver avec un plat de spaghettis avec des variables globales de la mort et des classes monstrueuses illisibles
    Rien qu'à lire ça, ça fait peur !

    Dur dur d'apprendre un nouveau langage et une nouvelle façon de développer (POO), ça demande beaucoup de lecture et d'apprentissage ! ^^

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    L'encapsulation est facilitée par la POO, mais elle ne lui est pas propre. C'est juste un question de santé mentale, un projet un peu gros est impossible à conceptualiser dans sa globalité, il faut le découper.
    ಠ_ಠ

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    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à.

  11. #11
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    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.

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    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 ?

  13. #13
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    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.

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par laedit Voir le message
    Ne peux-tu pas faire un UserControl pour chaque état du module par exemple ?
    J'avoue que je ne vois pas où tu veux en venir... Un UserControl pour chaque état ?

  15. #15
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu dis que tu va empiler tes contrôles. J'imagine que tu ne va pas tous les afficher en même temps, sinon ça va être le foutoir.

    Donc tu pourrais faire un UserControl par groupe de contrôles affichés en même temps.

    Après, vu que je ne sais pas exactement ce que tu veux faire, je me goure peut être.
    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.

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Je n'ai peut-être pas été assez claire dans mon explication. Je vais essayer de remanier un peu ça.

    Pour faire simple (je viens de trouver l'exemple qu'il me fallait), je veux reproduire le même comportement que le lecteur Windows Media.
    J'ai une barre de navigation situé en haut de mon formulaire et si je clique sur un des éléments, le contenu situé en dessous change en fonction du bouton cliqué.

    Dans mon esprit, je veux donc un seul et unique formulaire dont le contenu change en fonction de l'endroit où je me trouve dans mon application.

    Chacun de ses modules comme on peut les appeler sera un UserControl car cela semble être la méthode la plus simple et efficace pour une bonne séparation du code. Et chacun de ses modules sera visible / invisible en fonction de la zone dans laquelle je suis.

    Une fois l'application lancée, l'utilisateur ni voit que du feu et tout roule. Mon soucis, c'est dans la création de mon formulaire. Dans l'éditeur graphique, les différents modules vont être empilés puisqu'ils sont tous dans le même conteneur au final donc niveau ergonomie dans la création, c'est pas simple.

    Si on se réfère au titre de mon sujet, je veux le même comportement qu'un TabControl (un bouton au lieu d'un onglet m'affiche un UserControl au lieu d'un TabPanel) sans utiliser de TabControl. :p

    Oui je sais, je suis chiant. ^^

  17. #17
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    Par défaut
    Il te suffit de les ajouter à la volée, lors de l'exécution.

    Lorsque l'utilisateur clique sur un onglet, tu vire le UserControl courant et tu le remplace par celui correspondant à l'onglet cliqué.
    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.

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Oui oui, en terme d'exécution, il n'y a pas de problème. Je vois comment faire.
    Je cherchais juste à savoir s'il existe une méthode pour que dans l'éditeur graphique de Visual Studio, ça soit plus facilement gérable pour moi que d'avoir tous les contrôles les uns sur les autres.

  19. #19
    Membre émérite
    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 : 36
    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
    Points : 2 265
    Points
    2 265
    Par défaut
    Là je comprends pas...

    Dans un UserControl tu va empiler les contrôles ?

    Ou tu parle d'empiler les UserControl ?
    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.

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

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Empiler les UserControls. Dans mon éditeur graphique, je n'ai pas le choix. A moins qu'il existe une solution que je ne connaisse pas pour masquer un élément dans l'éditeur graphique.
    Après, je peux jouer avec les mises en arrière plan pour "faire remonter" le UserControl que je veux modifier à un instant T.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2011, 14h46
  2. Réponses: 4
    Dernier message: 05/05/2008, 12h43
  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, 09h49
  4. Réponses: 7
    Dernier message: 08/03/2004, 16h30

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