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 :

Développement graphique de UserControl


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Développement graphique de UserControl
    Bonjour,

    Je code en C# maintenant depuis un an et je commence à développer des choses intéressantes. Je suis automaticien et j'ai comme projet de développer un système le plus complet possible avec un PC. Le PC me sert d'automate, de serveur base de données et de moyen de supervision. Pour l'instant je communique avec des base d'entrées/sorties déportés grâce à mes méthodes MODBUS, je peux enregistrer des évenement dans des bases de données, etc.... Pour l'instant je suis assez content de mon travail .
    Une seule chose me pose problème: l'interface graphique. j'aimerai créer des objets utilisateurs pour ma partie supervision mais une chose me gène: c'est le fond du UserControl. Comment me débarrasser de ce fond? Imaginons que je crée un UserControl avec un cercle et un bouton, je me retrouve avec un fond très grand. Si je veux placer ce UserControl sur ma page de supervision, ce fond va venir cacher d'autres élément que j'aurais posé sur cette page.Nom : Capture.PNG
Affichages : 320
Taille : 2,2 Ko
    Sur cette image la ligne est effacé par le fond du UserControl alors que ce que j'aimerai, c'est qu'elle ne soit cachée que par le cercle par exemple.
    J'ai vraiment besoin d'aide pour cet aspect graphique dans lequel je suis complètement incompétent.

    Je remercie d'ores et déjà tous ceux qui prendront le temps de lire ces quelques lignes et de passer un peu de temps à réfléchir à mon problème.

    Cordialement

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonjour,

    Tout d abord je tiens a te feliciter pour l attention et la tenacité que tu portes a ce domaine en tant qu auto didacte
    Concernant la gestion de la transparence il existe 2 possibilités :

    1- depuis le constructeur de ton usercontrol tu ajoutes forces la gestion de la transparence ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    this.BackColor = Color.Transparent;
    NB : il faudra prevoir la notion de controles contenant contenu sinon la transparence seea mal geree.

    2- grace aux methodes : onPaint et createParams :

    http://stackoverflow.com/questions/9...ol-transparent

    Bon codage

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci pour cette réponse si rapide.

    Je n'arrive pas à obtenir le résultat souhaité. Je pense que cette notion de transparence est en fait un "mensonge" (oups ). En fait je pense que derrière cette propriété se trouve un code qui pompe les propriétés de couleur et de texture du contrôle parent. En fait il ne disparaît jamais. En fouillant sur internet j'ai vu que certain parlait de bibliothèque SDL ou XNA pour la partie graphique mais j'avoue ne pas avoir trouvé beaucoup d'explication sur ces bibliothèques, et le peu que j'ai trouvé m'a paru inabordable, bien trop spécifique aux développeur confirmé.

    Si quelqu'un a des informations la dessus je suis preneur

    Cordialement.

  4. #4
    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,

    il me semble que la transparence en windows form s'appuie un peu sur le ZOrder, mais effectivement, ne permet pas d'empiler 10 controles correctement.

    En général, une des solutions est d'avoir un seul userControl qui fait le boulot, ou bien d'utiliser lors du draw d'un control, la portion d'écran du parent ou se trouve
    le control à dessiner

    Celà dit, en faisant celà, on ne va pas gérer le chevauchement de UserControl...


    De toute façon, les UserControl n'ont pas d'Opacity (que ça soit le control personnalisé ou le User Control de base).

    Peut-être en basculant sur WPF, tu aurais ce type de comportement...

    Sinon, tu peux aussi te faire ton propre outil de dessin genre un PanelBoard dans lequel tu ajouterais tes "controles" qui seraient des shapes que tu dessinerais toi même et au final,
    comme tu aurais un control qui dessinerait tout, tu y arriverais...

    C'est ce genre d'approche qui est utilisée quand on veut faire un canvas en winforms affichant plus de "shape" (je mets entre guillemets car la notion de shape / canvas n'existe pas
    vraiment en Winforms...

    Ce qui veut dire que tu te fais ta propre librairie de controles ... genre un Panel qui un Usercontrol, et des shapes qui seront ta propre classe

    Si besoin, possible de t'aider si tu trouves celà trop compliqué (en fait, c'est assez simple à faire.. mais bon, faut prendre le temps de créer les objets de base !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci TheMonz pour cette réponse,

    Je t'ai relue plusieurs fois et je t'avoue que je ne comprend pas tout. Pas que tu ne sois pas clair mais plutôt qu'il y a des notions qui m'échappent. En fait comme je le disais dans mon premier message, je souhaite créer un système mais le but est de permettre de l'utiliser simplement. Le UserControl que j'ai montré sur mon premier message possède une foule de propriétés qu'un futur utilisateur pourra modifier, ce contrôle est rattacher à un objet via une propriété. L'utilisateur entrera une chaîne de caractère correspondant au nom de l'objet qui aura été instancié au lancement de l'application.
    En instanciant l'objet, l'utilisateur, sans le savoir, l’intègre à un Dictionnaire<string,objet> et le comportement de l'objet influencera le graphisme du userControl. Donc le principe UserControl est idéal pour moi. C'est cette aspect graphique qui est contraignant pour rendre quelques chose de conviviale.
    Alors peut être que l'on peut faire tout cela avec la méthode que tu me décris mais j'ai besoin de plus d'explication.

    Cordialement

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Il y a éventuellement une piste à creuser de ce côté ici et (ce sont des boutons mais il y a une bonne gestion de la superposition des contrôles et de la zone du click par exemple).

    Personnellement je m'en inspirerai (sans oublier les crédits adequats)


    Bonne continuation.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci de vous intéresser à mon problème.

    J'ai vu certaines choses qui pourraient m’intéresser en effet, je vais faire des essais. J'aimerai arriver à dessiner un peu comme l'on fait sur VISIO, mais avec les propriétés des contrôles en plus.

    Merci encore.

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Ben oui ,c'est un vrai mensonge tu as raison...
    Tomlev l'as appele fort justement la "transparence debile" !!!

    Tout ce que tu trouveras sur les formuns des "fakes" ou semblants de transparence...

    Le probleme des Winforms est que chaque control est responsable de la peinture ou dessin de sa zone cliente y compris l'arriere-plan ...
    Il s'ensuit que si l'on devait voir entierement ou partiellement (si transparence il y avait) un vrai control button ou un label derriere ton UserControl....Cela exigerait de repeindre toute l'arboresecence de controls meme partiellement chevauchees par ton UserControl mais qui appartiennent au Form & qui n'appartienent pas à ton UserControl ....
    En bref l'integralite du Form...!!!
    Pour resoudre ce probleme il faut l'algo du "peintre" Renoir ,puisqu'un bon peintre dessine les objets les plus eloignes puis remonte vers les plus proches....
    Celui--ci n'est pas implemente dans les winforms...
    En Wnforms,chaque control redessine son arriere-plan avec le BackColor du Parent et se contente de redessiner ses controls enfants...

    Seul les Winforms du WPF utilise l' algo du meticuleux "Peintre" Renoir qui gere parfaitment la transparence ,et le HitTestVisible de souris ...On peut cliquer sur un control place derriere un autre control !!!
    Bon code....

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Wouah, Merci pour ce message. Finalement je me trompe pas tant que ça sur le fonctionnement globale de Visual studio.

    Alors pour le WPF, je ne connais pas. J'ai déjà programmer en HTML et j'ai vu que les deux codes se ressembler un peu, au moins visuellement ( balise, etc...).

    Puis-je créer un usercontrol WPF et l'utiliser dans un projet WinForm?? tel est la question?

    Je sais que si je veux progresser, il faut que je passe au WPF car Visual Studio nous oriente de plus en plus vers cette façon de faire.

    Voici donc une excellente raison de laisser mon projet en Suspend et de me plonger la dedans.

    Cordialement.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    lu en diagonale, mais je confirme déjà que la transparence du winforms c'est du bricolage qui ne convient pas si des controles se chevauchent
    et aussi que wpf est un autre framework graphique de .net qui est très efficace sur le graphisme et qui permet de gérer ça
    par contre wpf nécessite de recommencer l'interface à 0, et si ton code n'est pas dissocié entre interface et code ca oblige à reprendre à aussi
    de plus wpf est un peu déroutant au début car ca ne s'utilise pas de la même manière (mais ca reste plaisant)


    il reste une solution, c'est de faire toi même ton moteur de rendu
    ca parrait compliqué dit comme ca, mais ca reste faisable je pense (enfin j'en ai déjà fait)

    pour ca il te faut des classes qui remplaceront tes usercontrol, avec les mêmes propriétés, mais il faut que ca soit des classes non graphiques
    il te faut aussi un parent qui s'occupe d'héberger ces "controles", et faire toi même un système de dessin sur chaque classe "controle" (que le parent appelera)
    il y a tout ce qu'il faut (drawline, drawrectangle, drawellipse, fill*, drawstring ...)
    tu peux au passage ajouter plusieurs fonctionnalités comme le zoom ou la modification de l'interface à l'exécution
    il faudra aussi gérer les clics, pour ca il y a aussi des choses simples, dans le principe seul le parent sera appelé sur onclick, mais il peut demander à chaque hébergé s'il contient les coordonnées de la souris (hittest)

    (il faut compter plusieurs centaines de lignes de code, connaitre comment fonctionne le rendu en winforms peut aider)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par Pick68 Voir le message
    Puis-je créer un usercontrol WPF et l'utiliser dans un projet WinForm?? tel est la question?
    tu peux mettre des UC wpf dans du windows forms, mais si tu veux utiliser la transparence et/ou les formes libres de wpf il faudra que ton usercontrol soit le parent et tout ce qu'il y a dessus aussi

    mais c'est peut etre la méthode la plus simple pour ce que tu veux oui, même avec des UC rectangles
    background par défaut vaut null, ce qui fait que ce qui est en dessous est visible, et le clic passe à travers il me semble (alors qu'avec background = transparent le clic ne passe pas à travers)

    genre un UC rectangle sans background qui contient un bouton rond et un label rectangle, tous 2 avec un background défini et ca devrait rouler (si le parent est un UC wpf comme dit précédemment)

    https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Projet
    Bonsoir à tous ceux qui se sont intéressés à cette discussion ou s'y intéresseront plus tard.

    Voici un avant goût du projet que je réalise, cela pourra mettre un peu de forme et de visuel à mes explications

    https://youtu.be/QDUPRMwPqHE

    Très cordialement.

    ps . J'attaque le WPF la semaine prochaine ( juré)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Resolution
    Bonsoir à tous

    En effet passer en WPF résout tous mes problèmes. les usercontrols créés en WPF possèdent un fond transparent par défaut, une VRAI transparence.
    WPF permet aussi de positionner les éléments d'une vue sur des plans différents.
    Enfin bref merci de m'avoir aidé.

    Très cordialement.

    PS je mettrais prochainement une vidéo pour monter le résultat

Discussions similaires

  1. Développement graphique en C#
    Par Nowwis dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/12/2009, 08h42
  2. [C#] Développement graphique (dessin).
    Par insane_80 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/10/2008, 12h41
  3. Réponses: 4
    Dernier message: 10/06/2008, 13h54
  4. c/c++ développement graphique
    Par ggnore dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 02/09/2004, 19h27

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