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 :

conseils pour une application multi-fenêtres


Sujet :

C#

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut conseils pour une application multi-fenêtres
    Bonjour

    J'essaie de développer une application avec WinForm. L'interface est découpée verticalement en deux parties :

    - la colonne de gauche correspond à un menu
    - la colonne de droite correspond à du contenu (ensemble de contrôles)

    Voici la première ébauche :



    Je voudrais pouvoir faire en sorte que quand je clique sur un des boutons du menu, le contenu de la partie droite change.

    J'ai pensé transformé la fenêtre principale en mdiContainer pour ensuite charger un formulaire enfant correspondant à chaque bouton. Le problème c'est que ces Form enfants passent sous mon control menuStrip (la colonne de gauche donc).

    De plus, ils disposent des boutons réduire, agrandir et fermer. Or je ne veux pas que l'utilisateur ait accès à ces boutons.

    Du coup, je me demande si l'utilisation de formulaires et d'un parent mdi est la bonne solution ou s'il n'y aurait pas un autre moyen d'obtenir le comportement que je souhaite ?

    Pourriez-vous me conseiller là-dessus?

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Salut,
    tu peux utiliser un SplitControl pour couper ta fenêtre en 2,
    cela te créera deux "Panel" que tu n'auras plus qu'à remplir avec un ou des controls utilisateurs
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Ok,j'ai essayé avec un splitControl mais ça ne me convient pas parce que le splitControl peut être déplacé et je voudrais que le menu de gauche soit fixe.

    en cherchant davantage, j'ai finis par trouver une solution pour désactiver complètement le controlBox des MDI Child. Il fallait mettre à NONE leur propriété formBorderStyle. Maintenant ils se comportent comme je le voulais à l'affichage.

    Merci tout de même pour ton aide

    Maintenant, je ne sais pas si c'est la meilleure solution pour ce type d'application. Si vous avez d'autres suggestions, je suis preneur.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2009
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    pour les boutons agrandir et minimiser il suffit de mettre les propriétés
    maximizebox et minimizebox de la form a false

    moi aussi j'aurai opter pour le split container et en mettant la propriété 'enable' du splitcontainer a false ceci aurai réglé le problème de la modification du panel ou se trouve les menu

  5. #5
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Si je ne m'abuse le MDI te permet d'ouvrir plusieurs fenêtres du même écran... Est-ce réeelement ce dont tu as besoin ?

    Pour une application, j'avais un TabControl dont chaque onglet correspond à une instance de mon écran et celà répond à mes besoins. Mais ce qui est intéressant pour toi, c'est que le contenu de chaque onglet est chargé dynamiquement avec un myTab.Controls.Add(...)

    Tu pourrais peut-être envisager de faire des contrôles utilisateur (qui prennent des objets comme paramètre du constructeur) et hop ton écran se charge. Dans ton cas, c'est le contrenu du panel qui est chargé dynamiquement.
    Un traitement associé au clic te permet de contruire les objets encapsulant les données et de les passer au contrôle à afficher.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Ok, je vais essayer avec les contrôles utilisateurs

  7. #7
    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
    Je suggererai aussi d'utiliser un Tabcontrol.

    Si la disposition est telle que tu l'a décrite (onglets à gauche), il faudra faire à la main le tracé des libellés des onglets de façon à afficher "menu1, "menu2", ... en horizontal, ce qui est toutefois assez simple.

    Pour le contenu de chaque container, tu peux utiliser pour chacun une form différente et modifier leur propriété Parent afin qu'elles s'affichent dans la tabPage appropriée.

    Dans cette solution, on travaille avec des Form standard (pas MDI).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Je peux charger un Form dans un tabControl ? Mais si j'utilise la méthode showdialog() mon problème initial va se reposer non? Ou alors il est possible de bloquer le Form dans son tabControl ?

  9. #9
    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
    Ou alors il est possible de bloquer le Form dans son tabControl ?
    Oui, une fois la forme créée, on modifie sa propriété Parent en lui affectant le TabPage voulu ( sans avoir besoin de faire le form.Show() ou ShowDialog() ).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  10. #10
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    J'ai fais un essai avec un tabControl et un Form que j'ai crée. J'ai essayé de charger le formulaire avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void tabControl1_Selected(object sender, TabControlEventArgs e)
    {
           Form2 form = new Form2();
           form.Parent = tabPage2;
    }
    Mais lorsque je clique sur le deuxième onglet, rien ne s'affiche. Ce n'est peut-être pas le bon évènement?

    J'ai ce message d'erreur qui apparait :

    Impossible d'ajouter un contrôle de premier niveau à un contrôle.

  11. #11
    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
    En fait ce que je fais, c'est de mettre tous les controls de la forme dans un Panel genéral (avec Dock=DockStyle.Fill) et de modifier la propriété parent de ce panel general.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  12. #12
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Ah ok, donc ce n'est pas vraiment un composant Form Du coup, je vais reprendre avec les contrôles utilisateurs.

  13. #13
    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
    Si, on définit une form indépendante avec toute sa gestion, et tu "déplaces" simplement tous ses controls sur le tabPage.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    désolé de repasser si tard mais : un splitcontainer peut avoir un de ses panels fixe (regarde ses propriétés).

    sinon tu peux tout simplement coller un panel en Dock.left pour le menu et un deuxième en Dock.Fill dans lequel tu chargeras tes usercontrol (en dock.Fill)
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  15. #15
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Bonjour

    Excusez-moi pour la réponse tardive. J'ai pioché un peu dans les conseils de tout le monde et finalement, j'ai utilisé un menuStrip latéral et un panel pour la partie droite dans lequel je charge des userControl différents pour chaque bouton du menuStrip

    Ça marche bien comme ça Merci pour votre aide à tous

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

Discussions similaires

  1. Conseils pour une application en réseau
    Par afatdz dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/10/2008, 16h02
  2. Réponses: 2
    Dernier message: 30/09/2008, 02h43
  3. Conseils pour une application de réservation
    Par kiwie dans le forum Débuter
    Réponses: 3
    Dernier message: 08/06/2008, 01h23
  4. conseils pour une application à interface web
    Par stdebordeau dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2008, 12h54
  5. Besoin de conseils pour une application
    Par peredodu dans le forum Access
    Réponses: 9
    Dernier message: 05/03/2006, 11h18

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