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 :

Label, Panel et Resize [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Label, Panel et Resize
    Bonjour et excusez moi si mon message est mal placé ou mal construit (plusieurs questions en un message pour éviter les multiposts), c'est mon premier sur le forum.
    J'ai cherché sur google, je n'ai trouvé aucune réponse, ni même venant du site, si les réponses s'y trouve, excusez moi encore pour ça.

    Je travaille sur un projet d'application, semblable à un installeur, Mais bon là n'est pas la question.

    Premièrement, j'ai fais un form sans bordures, j'ai donc voulu faire moi même les bordures et barre de titre, ce pendant je rencontre un petit soucis pour le resize vers la gauche et le haut.

    j'ai réussi à écrire un code qui marche pratiquement, ce pendant il a tendance à déplacer légèrement le form, si vous connaissez une solution, qui peut tenir en quelques ligne, ce serait cool (j'ai pas trop envie d'alourdir mon programme pour si peu, au pire je me contenterais de la droite et le bas, mais étant débutant je souhaitais surtout développer mes connaissances au passage).
    ce que j'ai donc fais est de resize ma fenêtre de façon classique tout en déplaçant la fenêtre (je suppose que visual studio fait quelque chose de similaire, car il y a le même tremblement que moi quand on resize la fenêtre par la gauche ou le haut même pour les panels, avec mon ordi qui commence a rendre l'âme depuis un moment quand je fais un resize sur visual studio en allant vite, je peux voir le backcolor [noir] du form car le panel suit pas le rythme) en l'empêchant de se déplacer si la fenêtre est à sa taille minimum pour justement éviter le déplacement, mais comme je vous l'ai dis elle se déplace quand même très légèrement, mais c'est déjà trop, j'ai même essayé en ajoutant un pixel à ma conditions (mon form fait 300 par 360 et pas 301 par 361). Il y a des + dans le code présenté, j'ai aussi essayé avec des -, j'ai essayé pas mal de chose dans la même idée comme remplacer this.Width par this.Left et son équivalent en Top mais le résultat est le même, mais rien de concluant.

    Voici le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (e.Button == MouseButtons.Left)
                {
                    int width = this.Width - e.X + lastClic.X;
                    if (this.Width > 301)
                    {
                        this.Left += e.X - lastClic.X;
                    }
                    int height = this.Height - e.Y + lastClic.Y;
                    if (this.Height > 361)
                    {
                        this.Top += e.Y - lastClic.Y;
                    }
                    this.Size = new Size(width, height);
                }
    Deuxièmement, j'ai remarqué que lorsqu'on faisait plusieurs form ça revenait au même que d'avoir plusieurs programme (quand on passe d'un form à l'autre on le voit dans la barre des tâches) j'ai donc décider de jouer avec des panels interchangeable, ma question est est il possible d'exporter les événements de chaque panel dans des fichiers différents, afin de ne pas avoir un "form1".cs digne d'un dico. si oui comment ?

    Troisièmement, j'ai un label avec du texte et dans ce texte, il y a un mot que je souhaiterais rendre cliquable, comme un link label, donc j'ai laisser un espace dans mon texte pour y mettre un link label avec mon mot cliquable, cependant c'est pas très ergonomique, surtout si je souhaite pouvoir adapter mon contenu en fonction de la taille de la fenêtre, donc la question est, est il possible soit d'intégrer un lien dans un label classique, soit de fixer mon link label par rapport au label, pour qu'il soit toujours bien placé dans le texte.

    dernièrement, j'ai fais une barre de titre avec une icone, pour cela j'ai mis mon icone dans une pictureBox et mon titre dans un label.
    J'ai mis la largeur du label identique à celle du form, cependant ça cache l'icone, j'ai essayé toutes les solutions que j'ai trouvé sur le net et ici pour rendre le backcolor du label transparent pour voir l'icone en dessous, mais rien de concluant, pourquoi je souhaite avoir un label qui fasse toute la largeur du form, pour le déplacement et le maximized via double clique sur la barre de titre, au départ j'avais tout simplement mis l'icône au premier plan, mais cela m'oblige donc à doubler le code pour le déplacement etc, si je peux économiser ça en rendant transparent mon label ce serait quand même mieux, donc sauriez vous ce que je peux faire ?
    J'ai essayé d'intégrer l'icone au label, mais l'image de base est trop grande et je ne peux pas la redimensionner, sauf en important une nouvelle ressource qui aura les bonnes dimensions, mais pareil si je peux éviter d'alourdir le programme, je préfère encore mettre la pictureBox au premier plan.

    Merci par avance à tous.

  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
    je suppose que tu es en winform

    au lieu de faire plusieurs panels pour tes différents forms faits des usercontrols (au passage sur un form on peut lui dire de ne pas être dans la barre des taches)

    pour l'histoire du linklabel il te faut un flowlayoutpanel avec une direction horizontale dans laquelle tu mets label puis linklabel puis label

    fait quelques recherches sur les différents panels et les propriétés de mise en page (anchor et autre) ca devrait solutionner pas mal de tes problèmes


    la transparence en winform c'est pas ca
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Bonjour et merci pour ta réponse.

    Oui je suis en winform, désolé j'ai oublié de préciser (je me demande quand même pourquoi faire autant d'API différente pour au final faire la même chose).

    J'ai trouvé un tuto sur youtube où la personne fais plusieurs form, mais au lieu de charger chaque form il paint son contenu dans un panel du form principale, est ce que cela pourrait me solutionner mon "problème" d'allègement/structuration ou y a t'il de meilleur solution comme celle dont tu me parles? Je croyais que users control était les boutons et autres composants, je vais mieux me renseigner à ce sujet, je sais qu'on peut cacher les forms de la barre des tâches, mais cela ne correspond pas à ce que je cherche, ce que je voulais dire c'est que lorsqu'on passe d'un form à l'autre on voit l'icône clignoter (de l'icône du premier form qui passe à celui du 2ème, même si c'est la même icône) et vu que je suis un peu perfectionniste quand je fais quelque chose qui m'intéresse bah je veux que ça soit parfait , de plus j'ai lu sur les forums, certains qui demandaient comment garder les informations entrée par l'utilisateurs dans un premier form lorsqu'on passe d'un form à l'autre et qu'on revient sur celui d'avant (genre les textbox s'effacent). alors qu'avec mes différents panels les infos restent.

    pour ta réponse à propos du link label, j'ai pas bien compris ce que tu me dis, mettre un label puis un linklabel et encore un label ? faut aussi que je regarde qu'est que le flowlayoutpanel, je ne sais pas encore à quoi ça correspond.

    pour ce qui est des propriétés (anchor et autre) je penses avoir saisi l'essentiel, je suppose qu'il y a encore quelques zones d'ombres.

    Oui j'ai remarqué que la transparence c'était une galère lol, j'ai essayé rapidement de passer sur WPF (pour une autre raison), je sais pas si c'est mieux pour la transparence, mais j'ai pas trop aimé la gestion des composants, peut être qu'une question de prise en main.

    Merci encore pour ta réponses très rapide en plus.

    PS : J'ai pas de description des éléments dans la boîte à outils, est ce normal où j'ai loupé un truc ?
    PS 2 : Dans WPF on peut zoomer sur notre design, est ce possible avec winform ? J'ai pas réussi

  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
    Citation Envoyé par Vincent Vision Voir le message
    je me demande quand même pourquoi faire autant d'API différente pour au final faire la même chose
    la même chose pas forcément, mais pas de la même manière par exemple
    wpf gère la transparence, permet de faire des animations, des controles avec des formes totalement custom (pas juste rectangulaires) ...
    et ca ne s'utilise pas de la même manière que winform (on ne pose pas les controles (même si on peut), mais on écrit du xaml)

    Citation Envoyé par Vincent Vision Voir le message
    Je croyais que users control était les boutons et autres composants
    boutons et autres sont des control
    un usercontrol c'est un objet un peut comme un form sur lequel on peut poser plusieurs controls, et qui ensuite se pose comme un control (d'ailleurs un usercontrol est un control aussi)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Ah oui tu réponds du tac o tac lol, c'est cool, par contre, j'ai pas trouvé userscontrol dans la boîte à outils, t'es sûr que ça existe sur winform ?

    Édit: Ah si, c'est juste pas dans la boîte à outils

  6. #6
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Je vais donc utiliser des usercontrols comme tu m'as conseillé, j'ai trouvé comment l'afficher sur mon form, cependant je vois partout qu'il faut le docker en fill, ce qui me paraît logique si on veut qu'il s'adapte au resize, mais je n'ai pas réussi à trouver la ligne de code correspondante, le seul exemple que j'ai vu (pour le dock) est pour afficher un form dans un panel, mais ça me souligne en rouge, donc je suppose que c'est différents avec les usercontrols. pourrais tu me dire ou je dois mettre mon dock = dockstyle.fill stp ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    J'ai trouvé pour le docking, par contre, je me suis un peu trompé, j'arrive à afficher le premier usercontrol via le form_load, par contre je cherche depuis tout à l'heure comment récupérer le panel container dans mon usercontrol afin de l'interchanger via le bouton interne au usercontrol.

    j'ai vu une vidéo ou le mec superpose ses usercontrol avec des panel qu'il rajoute au dessus de chaque usercontrol, j'avais pensé à une solution du même style, mais je suis sûr qu'il y a mieux, sinon j'avais aussi pensé mettre mes boutons suivant et précédent sur le from principale, mais ça veut dire qu'il faudra que je mettes plein de if pour savoir quelle page affiché en fonction du bouton et de la page actuelle, alors je me demande qu'est ce qui est le plus opti avoir un bouton avec autant de if que de page ou avoir autant de bouton que de page ?, sachant que sur la première page je n'ai pas ces boutons, donc il me faudra les masquer et les rendre visible en fonction du besoin.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    J'ai finalement opté pour des boutons sur le Form qui géreront mes switch entre UserControl.

    pour le resize, j'ai pas encore trouvé.

    la transparence pareil.

    et me suis pas encore penché sur la solution proposé pour le label avec link label.

  9. #9
    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
    tu fais un installeur dans quel but ?
    c'est pour livrer une autre appli que tu as codé ? en .net aussi ? dans un cadre professionnel ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    c'est plutôt un générateur, pour générer un bot discord que j'ai codé en javascript.
    J'ai commencé le codage le 24 Février en codant ce bot, j'ai déjà fait un générateur via extension vsc, mais je me suis dis et pourquoi ne pas directement faire une app

  11. #11
    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
    Citation Envoyé par Vincent Vision Voir le message
    J'ai finalement opté pour des boutons sur le Form qui géreront mes switch entre UserControl.

    pour le resize, j'ai pas encore trouvé.

    la transparence pareil.

    et me suis pas encore penché sur la solution proposé pour le label avec link label.
    Pour la transparence d'un usercontrol ou un control personnalisé tu peux faire ceci (recours à l'apî WinForm):
    code behind .cs d'un custom control descendant d'un Label ,d'un UserControl ou d'un Pane exclusibvement .
    Tu peux droper d'abord un bouton derriere lui puis ce control pour verification en Mode Design et Mode Run-Time (execution).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
                SetStyle(ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor, true);
                this.BackColor = Color.Transparent;
                this.BorderStyle = BorderStyle.FixedSingle;
            }
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x20;
                    return cp;
                }
            }
        }
    }
    Pour le resizing voici la mecanique (the "hard way") avec un usercontrol resizable (il faut utiliser Cursor):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class ResizableControl : UserControl
        {
            public ResizableControl()
            {
                InitializeComponent();
            }
            private Point lastClic;
     
            private bool isResizing ;
            private Color selectionForeColor = Color.LimeGreen;
            private void UserControl1_MouseDown(object sender, MouseEventArgs e)
            {
               Control current= sender as ResizableControl  ;
                if (e.Button == MouseButtons.Left)
                {
                    lastClic = e.Location;
                    if( current.Cursor == Cursors.SizeNWSE ||current.Cursor==Cursors.SizeNESW || 
                        current.Cursor == Cursors.SizeNS || current.Cursor == Cursors.SizeWE )
                    {    
                        // pointeur souris  sur un des cotes 
                        isResizing = true;
     
                    }
                }
            }
     
     
            private void UserControl1_MouseMove(object sender, MouseEventArgs e)
            {
                Control current = sender as ResizableControl;
                int dx = e.X - lastClic.X;
                int dy = e.Y - lastClic.Y;
     
                if( isResizing ) // "Resizing".
                {
                    current.BackColor = this.selectionForeColor;
                    if (current.Cursor == Cursors.SizeWE)
                    {
                        current.Width = e.X;
                    }
                    else if (current.Cursor == Cursors.SizeNS)
                    {
                        current.Height = e.Y;
                    }
                    else if (current.Cursor == Cursors.SizeNWSE)
                    {
                        current.Width =e.X;
                        current.Height =e.Y;
                    } 
     
     
                }
                else //  "give feedback" 
                { 
                    if ((e.X + 10) > current.Width && (e.Y + 10) > current.Height)//coin Bas-Droit
                    { 
                        current.Cursor = Cursors.SizeNWSE;
                    }
                    else if ((e.X - 10) <= 0 && (e.Y - 10) <= 0) //coin Haut Droit
                    {
                        current.Cursor = Cursors.SizeNWSE;
                    }
                    else if ((e.X + 10) > current.Width)
                    { 
                        current.Cursor = Cursors.SizeWE; // largeur
                    } 
                    else if ((e.X + 10) > current.Height )
                    { 
                        current.Cursor = Cursors.SizeNS; // hauteur
                    } 
     
                    else //  cursor SizeAll.
                    { 
                                current.Cursor = Cursors.SizeAll;
                    } 
                }
            }
     
            private void UserControl1_MouseUp(object sender, MouseEventArgs e)
            {
                 isResizing = false;
            }
     
        }
    }

    bon code...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Micro-Entrepreneur
    Inscrit en
    Avril 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Micro-Entrepreneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2021
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Je me suis finalement tourné vers le Python qui je pense sera plus adapté à mes projets

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/04/2015, 13h25
  2. Click Label Panel
    Par Thesum dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/04/2008, 18h52
  3. Rafraichissement Label ou Panel ?
    Par titor dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/12/2006, 11h09
  4. [VS2005][C#] Centrer un label dans un panel redimensionnable
    Par Bapt.ice dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/08/2006, 17h29
  5. Label Superposés (setLocation) ou Panel repaint
    Par kliel dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/02/2006, 11h28

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