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 :

(constat) Padding dans un TextBox


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 801
    Par défaut (constat) Padding dans un TextBox
    Les marges d'un TextBox dans WinForms offrent un exemple de ce que peut donner une utilisation laxiste du vocabulaire.

    Nous avons l'habitude, notamment en web, de distinguer Margin, qui est la marge extérieure (marge entre deux contrôles par exemple), de padding, qui est la marge intérieure (marge entre le bord du contrôle et celui de son contenu).

    L'aide de Control.Margin indique qu'il ne faut pas attendre grand-chose de cette distinction en WinForms :
    public System.Windows.Forms.Padding Margin { get; set; }
    Margin est de type Padding, rangez bien vos affaires.

    En dessous, la définition enfonce le clou :
    A Padding representing the space between controls.
    Ainsi, trouver "Padding" dans l'aide de Margin pourrait donner l'illusion qu'on va trouver le chemin, or non, pour appliquer une marge intérieure à un TextBox, il faut monter une usine à gaz :
    https://stackoverflow.com/questions/...extbox-padding

    Alternativement, pour un TextBox qui exprime le contenu d'une propriété numérique, qui au chargement devra donc exécuter un code, et en quittant exécuter un autre code pour entregistrer la saisie, on peut biaiser à ce niveau ; par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txbSys.Text = _Sys.ToString() + " ";

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 934
    Par défaut
    Attention, tu es en train de tout mélanger.
    Tu confond la description de la propriété et la description de la valeur de la propriété.

    Padding et Margin ont tout les deux la même structure.
    Et justement, ce n'est pas une classe mais bien une structure.
    Cela implique qu'il n'est pas possible d'en hériter
    Donc Microsoft (sans doute pour éviter de dupliquer du code) n'a créé qu'un seul type pour les deux.
    C'est d'ailleurs noté dans l'aide de la structure Padding qu'il sert au deux.
    https://learn.microsoft.com/en-us/do...tframework-4.8
    Citation Envoyé par Microsoft
    Represents padding or margin information associated with a user interface (UI) element.
    Donc Padding et Margin sont tous les deux de type Padding.
    Donc à cet endroit, dans "A Padding representing the space between controls.", il faut comprendre :
    Margin est une valeur de type Padding (il y a P majuscule) qui représente l'espace entre les contrôles.

    D'ailleurs si on regarde la description des propriété et non de leur valeur.
    Description de la propriété Margin :
    Citation Envoyé par Microsoft
    Gets or sets the space between controls
    Description de la propriété Padding :
    Citation Envoyé par Microsoft
    Gets or sets padding within the control.
    Edit : Sur cette page, tu te rends mieux compte que les deux cas sont bien distingués :
    https://learn.microsoft.com/en-us/do...orkdesktop-4.8

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 801
    Par défaut
    Oui, oui, je grossis un peu l'occasion de se mélanger les pinceaux, en fait c'est devenu clair assez vite, c'est pour ça que ce n'était pas une question que je posais. Disons que je me "la suis jouée caustique".

    Il n'en demeure pas moins nécessaire de recourir à une usine à gaz si on veut une marge intérieure dans un TextBox, pas vrai ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 520
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 520
    Par défaut
    A partir du moment, où les TexBox n'ont pas de Padding, oui, il faut trouver une alternative

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 934
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Il n'en demeure pas moins nécessaire de recourir à une usine à gaz si on veut une marge intérieure dans un TextBox, pas vrai ?
    En WinForm, c'est un non sens de vouloir mettre un padding sur une zone de texte, puisqu'une zone de texte n'est pas un conteneur.
    En revanche, un Panel est un conteneur.
    Donc cette propriété est masqué sur le composant TextBox et est disponible sur un composant Panel.

    Si tu veux un client lourd dont les procédés d'affichage se rapprochent de ce qu'on retrouve sur une application Web, regarde du coté de WPF.

    Edit :
    Sinon, en Winform, tu peux faire un UserControl qui appliquera ce que tu as vu sur stackoverflow.
    Cela se fait en quelque clics, ce n'est pas vraiment la définition que je donnerai d'une usine à gaz.
    1. Create a Panel
    2. Set its border to match a Textbox (e.g., Fixed3D)
    3. Set its background color to match a Textbox (e.g., White or Window)
    4. Set its padding to your satisfaction (e.g., 10,3,10,3)
    5. Add a Textbox inside the panel
    6. Set the Textbox's border to none
    7. Play with the Textbox's Dock and Anchor properties do get desired effect

  6. #6
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 801
    Par défaut
    Un non sens de soigner l'apparence, bon chacun son point de vue.
    Ah WPF peut-être ...

    Les bricolages avec un Panel, ça rappelle bien ce que nous avons fait il y a un peu plus d'un an pour rendre plus apparent qu'une case soit cochée ou non.
    Et maintenant ça ne sert plus pour la plupart des machines car sous Windows 11 Microsoft s'est décidé à traiter le problème (sous Windows 10 on a encore à peu près deux ans pour se préparer à Unix).

    Alors pour le projet en cours j'ai eu recours à la dernière solution que j'ai évoquée  :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                txbSys.Text = _Sys.ToString() + " ";
    Ça fait bien un caractère de marge à droite.

    Je n'ai pas encore traité la modification, c'est possible que pendant la saisie il n'y ait plus de marge.
    En fait, la saisie a été faite avec un alignement à gauche. Pour présenter des nombres ce n'est pas l'idéal, mais au moins on n'est pas collé à droite. C'est subjectif mais je trouve que ça choque moins.

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Un non sens de soigner l'apparence, bon chacun son point de vue.
    Ah WPF peut-être ...
    Ben c'est vrai que Winform est super rigide niveau graphisme comparativement à wpf.

    En wpf pour cet exemple précis toute les deux sont de types Thickness qui permet d'indiquer les valeurs pour gauche,haut,droit et bas.

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 934
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Un non sens de soigner l'apparence, bon chacun son point de vue.
    Ah WPF peut-être ...
    Ce n'est pas un non sens de vouloir soigner l'apparence, bien au contraire.
    Ce qui l'est c'est de vouloir le faire avec une technologie qui n'a pas été prévue pour ça et se plaindre parce que c'est plus compliqué.
    Ce n'est pas une question de point de vue.
    C'est un fait historique.

    Le Web a commencé à émerger réellement dans les années 2000.
    Mais la technologie de Winform remonte aux années 1990.
    Elle est très fortement liée à l'environnement Windows et à la façon dont Windows gérait l'affichage dans les années 1990.
    Et pour ne rien arranger, elle a très peu évoluée (quelque coup de pinceaux) car, justement, d'autres technologie comme WPF sont arrivées.

    Tout ça pour dire que si tu veux des écrans modernes et soignés, il faut utiliser une technologie moderne et adaptée.
    Avec le vieux bousin qu'est Winform, il faut ruser et y mettre plus ou moins d'efforts.

Discussions similaires

  1. [C#] Obtenir un format dans un textbox
    Par kenzo080 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 16/04/2007, 16h04
  2. [] Nombre de lignes dans un textbox
    Par juanelcalor dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/07/2005, 11h54
  3. [C#] Retour à la ligne dans un TextBox MultLine
    Par Oberown dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/07/2005, 11h39
  4. [c#]Gros text à afficher dans une textbox
    Par famemaur dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/05/2005, 10h12
  5. Réponses: 2
    Dernier message: 08/04/2004, 11h11

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