none
Comment personnaliser le texte d'un contrôle button RRS feed

  • Question

  • Bonjour,

    Mon objectif est :
    1- de créer un form avec des boutons personnalisables par l'utilisateur (police, taille du texte)
    2- que chaque bouton contienne un texte présenté sur 3 lignes et 2 colonnes comme suit :

    ref      titre
             descriptif
    date   auteur

    3- que la taille des caractères du titre soit différente de celle de ref, date, descriptif et auteur.

    Mes problèmes :
    1- je n'arrive pas à changer la taille de la partie de texte 'titre'

    2- Je n'arrive pas à aligner titre, descriptif et auteur.
    J'ai essayé d'utiliser la séquence escape de tabulation dans un string.Format mais sans succès car "\t" n'est pas reconnu.

    J'obtiens :

    reftitre
    descriptif
    dateauteur

    Avec des polices à chasse fixe je n'ai pas ce souci, mais on ne peut plus vraiment parler de personnalisation dans ce cas.

    Merci d'avance pour votre aide :)

     

    mardi 17 mai 2011 16:22

Réponses

Toutes les réponses

  • Bonjour,

    vous pouvez créer votre propre button en héritant de la classe button ou control.

    Pour formater le text comme bon vous semble vous devrez surcharger le OnPaint.

    Vous trouverez un exemple qui pourrait vous guider sur msdn : How to: Create a Custom Image Button Control

    Remarquez notamment les appels à e.Graphics.DrawString() qui permettent d'afficher le text.

    Cordialement

    mercredi 18 mai 2011 11:50
    Modérateur
  • Bonjour,
    Merci pour ces infos :)

    J'ai donc créé une nouvelle classe CustomButton avec l'assistant de Visual Studio 2010 en choisissant le modèle Windows Forms / Contrôle utilisateur.
    La nouvelle Classe dérive donc de Control.

    J'ai copié/collé un de mes boutons actuels dans le concepteur de cette classe pour créer un bouton avec toutes les propriétés déjà initialisées.
    J'ai ensuite remplacé System.Windows.Forms.Button par CustomButton
      - dans la définition d'un de mes boutons
      - dans la référence correspondante du initializeComponent() de mon formulaire.

    Enfin, j'ai modifié le OnPaint de la classe CustomButton avec des Drawstring, j'ai compilé et j'obtiens le résultat attendu ! :)

    ... a deux détails près :
      - quand j'ouvre le concepteur de mon formulaire un message s'affiche : "la référence d'objet n'est pas définie à une instance d'un objet"
        ce message concerne le bouton créé via CustomButton !

      - j'ai dû commenter les initialisations de FlatAppearance.BorderColor, TextAlign et UseVisualStyleBackColor que j'utilisais dans mes boutons standard
        car elles ne sont pas prises en charge par Control. Le comportement du bouton est de ce fait un peu différent.
        Je n'ai pas trouvé comment dériver la nouvelle classe de Button dans l'assistant.
        Puis-je faire les modifications de code pour passer de Control a Button "à la main" ?


    jeudi 19 mai 2011 16:03
  • Bonjour,

    Vous pouvez construire un Control dérivé de Button pour éviter les erreurs. Une procédure simple est la suivante :

     

    1)   Ajoutez une nouvelle classe BTN dans votre projet et puis modifiez le code pour la dériver de Button :

    class BTN: System.Windows.Forms.Button

    {

    }

     

    2)   Modifiez l’évènement OnPaint().

     

    3)   Compilez votre projet et vous trouvera le nouveau control dans la boite à outils, dans l’onglet « ButtonInherit Components » qui sera automatiquement ajouté.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 20 mai 2011 09:53
  •   - quand j'ouvre le concepteur de mon formulaire un message s'affiche : "la référence d'objet n'est pas définie à une instance d'un objet"

    En fait ce message intervient parce que le texte dessiné dans mes boutons n'est pas fixe, il est déterminé par programmation dans ma classe principale.
    Si je mets "xxx" dans les DrawString, le message disparaît et "xxx" apparaît à l'écran du concepteur.
    vendredi 20 mai 2011 13:32
  • Cela fonctionne ! merci ! :)
    vendredi 20 mai 2011 13:33
  • Bonjour,

    De rien. Merci pour tenir la communauté informée sur la suite de vos démarches. SVP marquez comme réponse les posts que vous considérez  utiles pour la solution finale, afin que d'autres personnes avec le même problème puissent profiter de cette solution. Merci !

     

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 20 mai 2011 13:41
  • Oui, il ne faut pas perdre de vue que le code que l'on écrit (pour les
    contrôles personnalisés) est aussi exécuté en mode design.
    Il existe une propriété intéressante à ce sujet : DesignMode
     
    --
    Fred
    foleide@free.fr
     
     
    vendredi 20 mai 2011 13:47