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 :

Faire un IHM sous visual studio ?


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Faire un IHM sous visual studio ?
    Bonjour à tous !

    J'espère déjà posté au bon endroit (je pense). Pour l'histoire, je développe depuis quelques temps pour mon plaisir personnel un jeu en C++ sous Qt. Le jeu en question est un simple jeu de gestion/stratégie dans un univers futuriste (comme le jeu Aurora si certains connaissent. Ou alors un sorte de civilization, au tour par tour, dans l'espace avec très peu de graphisme mais plus poussé niveau détail et micro-gestion). J'ai laissé tombé le projet pendant un moment et finalement je me suis récemment décidé de retourner dedans à mes heures perdus. Si j'explique autant c'est que en plus d'une question sur le C# j'aimerai des conseils sur le fond si vous en avez.

    Le truc, c'est qu'avant de reprendre, je me suis posé la question de "et si je repartais de 0? en gardant certaines méthodes mais en essayant de refaire tout, plus propre, avec Git, avec un excel pour lister les modules que je souhaite développer..." bref un peu plus organisé. Et je me suis également posé de la question du language.

    J'aime beaucoup Qt, mais le C++ et Qt peuvent parfois être un peu rébarbatifs, notamment avec la gestion de la mémoire, les headers, etc... et je me suis alors tourné vers C# avec visual studio community 2015 (j'ai regardé vite fait Java avec WindowBuilder mais je suis pas du tout convaincu). (donc déjà question de fond, C# sous visual studio plutot que Qt, bonne idée pour un jeu amateur mais plus évolué qu'un simple pong?)

    J'arrive donc à ma question : Peut on réellement faire un IHM propre sur Visual studio? Déjà le principe des forms j'aime pas trop, on dirait plus des petites fenêtres bonnes pour faire des pop-ups ou des trucs super simple.

    En gros, je galère un peu pour gérer la continuité de mon IHM. Sous Qt j'avais une "windows" dans laquelle je venais charger des widgets selon la situation. De ce fait, c'était assez simple (sur un appel il suffisait de fermer le widget affiché et de le remplacer par celui que l'utilisateur voulait).

    Ici, je suis dubitatif. Rien que pour faire un menu principal qui donne accès à une page d'option, une page de chargement et une page de création de partie (composée de plusieurs form pour définir la taille de l'univers, sélectionner la civilisation pour le joueur...) je suis un peu paumé... et du coup je me demande si j'utilise le logiciel, et le langage, comme il faut.

    Pour résumer

    1- Comment passer proprement d'une form à une autre ? Sans que l'utilisateur voit la premiere form disparaitre avec un .hide et une autre prendre sa place avec un .show. N'y a t'il pas un "conteneur" principal qui vient afficher la form que l'on veut ?

    2- Dans le cas d'une form disposant de plusieurs affichages (c'est le cas de ma form de création de partie qui affiche d'abord les options pour l'univers, puis les options pour la civilisation...), y a t'il quelque chose du même style que le "stackedWidget" sous Qt ? J'ai bien vu un "TabControl" mais est-ce la seule issue ?

    Désolé pour le pavé et merci d'avance pour vos réponses !

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    oui, tu peux tout à fait utiliser C# pour faire ton jeu, pas de contre indication...

    Après, pour l'aspect graphique, c'est fonction de ce que tu veux...

    Si tu veux du beau, WPF est peut-être plus adapté mais plus compliqué à prendre en main que Winforms, c'est une certitude...

    après, pour faire un jeu, je ne suis pas sur que se tourner vers les winforms soit l'option ultime... plutôt un truc comme DirectX serait plus approprié.

    Evidemment, DirectX, c'est pas simple, simple non plus à utiliser...

    Ya des librairies C# pour en faire (SlimDX, etc...) et des moteurs graphiques 3D qui intègres (Ogre par exemple) des GUI (IHM en français) pour faire les menus, etc...
    Bref, avec un moteur 3D, tu seras plus dans l'environnement jeu... mais, contre partie, ça demande peut-être un peu plus de dev pour la première fois (et après, comme
    souvent, on réutilise des choses que l'on a fait, d'où gain de temps).

    Pour moi, le choix du moteur graphique (Winform, WPF, DirectX 3D) est fonction du rendu final que tu veux fournir à l'utilisateur...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Pour répondre plus spécifiquement sur le fonctionnement de la fenêtre, ce que tu explique correspondrait en l'utilisation des UserControls en C#.

    En gros tu as une Form, dans laquelle tu affiche un (ou plusieurs) UserControl, quand tu veux changer le contenu de ta Form, tu change de UserControl.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Salut TheMonz.

    Justement niveau visuel ça sera archi-simple. En gros, pas de 3d du tout. La plupart du jeu sera textuel, avec quelques graphiques par ci par là dessinés par le logiciel (map de la galaxie par exemple, simple point blanc sur fond noir si le jeu détecte un objet à la coordonnée sur l'écran). Mais forcement, comme la plupart de jeu de gestion, je vais avoir besoin de nombreuses fenêtres à pouvoir afficher à l'utilisateur pour qu'il ait accès aux nombreuses informations disponibles.

    J'ai tenté de voir pour utiliser Unity3D, mais je n'aime pas du tout à vrai dire... j'ai l'impression de ne pas être maître de ce que je fais, contrairement au C++.

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bah tu peux aussi avoir une seule fenetre découpée avec des éléments sur le coté (un peu comme Visual studio)... et donc, les informations seront affichées
    en permanence à l'écran pour l'utilisateur...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Kyroon Voir le message
    Bonjour,

    Pour répondre plus spécifiquement sur le fonctionnement de la fenêtre, ce que tu explique correspondrait en l'utilisation des UserControls en C#.

    En gros tu as une Form, dans laquelle tu affiche un (ou plusieurs) UserControl, quand tu veux changer le contenu de ta Form, tu change de UserControl.

    Bonne continuation.
    Oh, ca semble effectivement interessant. Le UserControl serait l'équivalent du Widget ? Je peux définir un UserControl à part, comme une classe, et le charger dans ma form ? (et je n'aurai du coup qu'une form pour tout mon programme ?)

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    bah tu peux aussi avoir une seule fenetre découpée avec des éléments sur le coté (un peu comme Visual studio)... et donc, les informations seront affichées
    en permanence à l'écran pour l'utilisateur...
    A vrai dire j’espérais plus pouvoir reproduire le système que j'avais auparavant en C++ sous Qt. En gros, une fenêtre qui reste à l'écran dans laquel je peux venir déposer l'élément visuel que je souhaite. Je ne veux pas d'un système comme Visual Studio, question de goût j'imagine, mais ça ne me semble pas très ergonomique dans le cadre d'un jeu vidéo.

    Edit: Effectivement, après avoir regardé rapidement sur VS, le UserControl semble bien correspondre à ce que j'avais en tête dès le départ. Reste du coup ma seconde question, y a t'il un moyen de définir différentes "pages" sur un UserControl ? En gros, un élément avec un index que je pourrais incrémenter ou décrémenter à chaque fois que mon utilisateur clique sur un bouton "suivant" ou "précédent".

    Edit2: Bon lol, j'ai l'impression de ne pas utiliser le UserControl en tant que sa fonction première (ca ressemble plus à un élément graphique perso et customisé réutilisable à placer dans différentes forme qu'une page en tant que tel) mais ca devrait pouvoir faire l'affaire.

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    pas vraiment de notion d'index, mais après, tu peux utiliser le tabControl en masquant le selecteur d'onglet...

    MAis au final, ca revient à faire un empilement de userControl et faire un Show() de celui que tu veux voir au dessus (pas forcément besoin de faire un hide si celui qui
    vient au dessus couvre toute la place utilisée
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Très bien, je vais faire cela .

    A vrai dire, si je veux faire ça c'est purement par organisation. Je ne veux pas de 6 UserControl juste pour une "activité" de mon application (ici, définir les paramètres d'une partie). Je préfère avoir un seul UserControl que j'appelerai "GameCreationControl" qui dispose de plusieurs étapes et qui concentre les variables (en plus, ca m'éviter de devoir passer les paramètres selectionnés par l'utilisateur d'un Control à l'autre avant de faire appel à mon CoreManager pour générer l'instance du jeu).

    En tout cas merci beaucoup pour vos réponses ! Je vais continuer de faire "joujou" un peu avec le C#, histoire d'être sur de vouloir poursuivre sur cette voix et abandonner le C++.

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    pas de problème

    pour le TabControl, si tu veux supprimer le "header" d'onglet, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maintab.Appearance = TabAppearance.FlatButtons; Maintab.ItemSize = new Size(0, 1); Maintab.SizeMode = TabSizeMode.Fixed;
    dans le designer (par exemple, ça marche très bien)

    et avoir 2 boutons au dessous qui joue avec le SelectedIndex du TabControl pour faire du suivant / Précédent

    et en terme de rapidité, ça sera beaucoup plus performant que du Show() / Hide();

    donc, au final, un Usercontrol avec un tabControl, xx pages correspondant à ce que tu veux + 2 boutons (Précédent / suivant) dessous le tabControl par exemple et basta.

    Bref, super rapide à faire !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Re-bonjour, je passe te remercier vite fait pour ton coup de main et pour poster ce que j'ai fais, dans le cas où cela pourrais aider certains .

    Du coup, pour obtenir ce que je voulais, j'ai bel et bien utilisé une seule Form dans mon application (mainForm) qui est référencé dans mon CoreManager (singleton accessible depuis n'importe où dans le programme). De ce fais, je peux manipuler ma fenetre avec CoreManager.Instance.MainForm où je le souhaite.

    Pour ce qui est de l'enchainement, j'ai crée un FormManager qui dispose d'une méthode statique controlRequest(UserControl control). Cela me permet, encore une fois de où je veux dans mon app, de vider et charger mon mainform du user control que je veux utiliser.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void controlRequested(UserControl control)
            {
                Console.WriteLine("--- Control "+control.Name+" has been requested ---");
                CoreManager.Instance.MainForm.Controls.Clear();
                CoreManager.Instance.MainForm.Controls.Add(control);
            }
    J'ai utilisé ton code pour créer mon tabControl sans header et ça remplis sa fonction, merci .

    Si vous voyez une utilisation incorrecte/gourmande ou peu efficace du C# dans ma façon de faire, n'hésitez pas à me corriger !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2015, 22h48
  2. Comment faire des animations sous visual studio express 2013 ?
    Par Anonyme5571 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/11/2014, 09h29
  3. Réponses: 0
    Dernier message: 28/10/2014, 12h30
  4. Réponses: 1
    Dernier message: 25/05/2012, 15h10
  5. Réponses: 0
    Dernier message: 11/07/2011, 12h47

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