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 :

Création d'un control custom


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Création d'un control custom
    Salut.

    Je débute actuellement en C#, et j'aimerais réaliser une sorte de launcher pour un jeu multijoueur en incluant une liste de serveurs sur ce launcher.
    Cette liste doit être "dynamique" vu que le nombre de serveurs en ligne ne dépendra pas de moi et je ne pourrais donc jamais le savoir à l'avance.
    Utilisant DotNetBar (de DevComponents), j'ai d'abord pensé à utiliser une ListBoxAdv. Sauf que ce control n'est pas du tout souple étant donné que j'aimerais "designer" moi même le control à utiliser.
    J'ai donc pensé à créer une classe CServerUI.cs et j'ai créé des contrôles de DotNetBar en attribut. Le hic, c'est qu'à la création, je ne saurais pas où placer ces contrôles dans l'espace.
    Cela peut paraître peu clair, et si c'est le cas, dîtes le.

    Résumé du problème : Je veux créer une liste d'items à afficher de taille non fixe. La ListBoxAdv de DotNetBar n'est esthétiquement pas un bon choix. Donc j'ai décidé de coder ma propre version de ce control. Sauf que ça poserait un problème de placement dans l'espace et plusieurs autres problèmes (par exemple, lorsque je veux instancier un objet de type CServerUI, comment je peux le placer par rapport à celui d'au dessus s'il y en a un, et si j'arrive en bas du formulaire, comment ajouter une sorte de scroll-list).

    PS : J'ai un niveau correct en C++, mais du fait de l'aspect design prioritaire sur le launcher, j'ai décidé de me lancer sur du C#.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    on va partir du principe que tu es en windows forms (en wpf (autre framework graphique plus poussé pour .net) ce serait différent)

    il te faut un usercontrol pour afficher les infos d'un serveur
    après il te faut un container qui va avoir toutes les instances de ce usercontrol sous forme de liste

    tous les containers de windows forms ont une propriété autoscroll, ce qui fait que si un controle sort de la zone un scrollbar apparait
    avant je préconisait le flowlayoutpanel, quand on lui ajoute des controles il les place les un à la suite des autres (horizontalement ou verticalement)
    maintenant je dirais plutot un panel simple avec utilisation de la propriété dock, l'avantage est le resize automatique sur l'autre axe

    si tu veux tes UC de haut en bas tu ajoutes tes controles on leur mettant la propriété dock à Top et faire .bringtofront dessus (bringtofront sert normalement à ramener au plus près sur l'axe Z (superposition de controles) mais ici il sert à bien gérer l'ordre d'affichage vu qu'ils sont tous dock à top (dock gère l'empilement comme il faut)

    si nécessaire avec le FLP ou le panel simple tu peux faire en sorte que ca soit sélectionnable comme un listbox de usercontrol (avec quelques lignes de code supplémentaire)

    après si tu veux vraiment du design tu peux partir sur wpf, il n'y pas vraiment de limite technique (un controle triangle est possible par exemple)
    auquel cas c'est un itemscontrol bindé à une collection et un datatemplate pour l'affichage (le datatemplate permet de faire l'équivalent d'un usercontrol)
    wpf est un peu déstabilisant au début (autre façon de coder) mais sympa au final

    et en général on peut se passer de composants graphiques tiers en .net, tout est assez souple pour en faire des spécifiques facilement si nécessaire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut.

    Désolé pour ma réponse tardive, mais je n'étais pas disponible plus tôt.
    Qu'est-ce qu'un usercontrol ? J'ai tenté de rechercher ce control dans la boîte à outils sans arriver à le trouver.
    Ensuite, actuellement mon ui "template" se compose de plusieurs labelX contenus dans un panel simple (le panel est là déjà pour délimiter un serveur par rapport à un autre, et aussi pour m'aider à les placer au besoin). (figures suivantes)





    Je n'ai cependant pas compris comment je peux partir de ce template (j'ai C/C le code du designer dans une classe à part) pour qu'il se répète et se positionne automatiquement pour que le deuxième serveur à afficher en utilisant ce template soit juste en dessous du premier, etc.
    Peux-tu m'éclairer à ce sujet ?

    Enfin, je préfère utiliser les form et les controls Metro de DevComponents qui sont, à mon goût, plus beaux que les forms natifs à Visual Studio sous Windows Form.

    Merci pour ton aide,
    Soufiane.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un usercontrol, c'est un control container sur lequel on pose tous les controles qu'on veut, on lui donne un nom, ensuite ce control apparait dans la boite à outils
    quand on en pose un tout ce qu'on a mis dessus est là aussi
    ca permet de regrouper pour avoir une fonctionnalité
    c'est le même principe en design qu'un form
    ca ressemble à l'image que tu as mis
    et donc, même dynamiquement quand tu fais monusercontrol uc = new monusercontrol, et que tu l'ajoutes sur la fenetre, tu as tout le groupe unifié qui est ajouté

    concernant devcomponents, qui a l'air payant (pas donné) et comme je l'ai dit plutot ca reste peu utile, faire la même chose prend quelques lignes de code ... pour transformer le design d'un label par exemple ca doit être au pire 4 lignes de code ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Création de fichier controle
    Par big1 dans le forum Administration
    Réponses: 8
    Dernier message: 30/04/2008, 16h39
  2. Création d'un Datagridview custom et colonne custom
    Par Yogy dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/03/2008, 15h16
  3. Probleme de création dynamique de controles
    Par zalalus dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/09/2007, 15h41
  4. [MFC/ActiveX] Controle custom vs tabstop
    Par julien_v3ga dans le forum MFC
    Réponses: 6
    Dernier message: 12/07/2006, 14h49

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