none
Hauteur d'un Label RRS feed

  • Question

  • Bonjour tout le monde,

    En WinForm, j'ai deux informations à afficher, l'une en dessous de l'autre, dans des polices différentes. La longueur de la première est variable, j'aimerais que la position de la deuxième s'ajuste en conséquence.

    Avec lblText_TextChanged, je peux faire quelque chose comme ça :

    lblSoftware.Top = lblText.Top + lblText.Height;
    

    Seulement, il s'avère que la hauteur retournée par lblText.Height correspond à la hauteur avec une seule ligne d'écrite. Or, si j'ai pris la peine d'indiquer lblText.MaximumSize, c'est bien parce que la longueur de texte peut dépasser celle d'une ligne, auquel cas le texte est affiché sur plusieurs lignes.

    Je prévois de faire un travail sur le texte pour permettre la césure sur un séparateur (espace par exemple), ce qui suppose de trouver la routine qui tient compte de la taille de caractère. Logiquement ceci doit permettre de connaître le nombre de lignes sur lesquelles s'affiche le contrôle. Est-il toutefois possible avant cela de trouver la hauteur réellement occupée par le contrôle Label ?

    jeudi 29 avril 2021 07:48

Toutes les réponses

  • Bonjour,

    Si vous souhaitez activer le retour automatique à la ligne dans le texte de votre label, vous devez définir AutoSize=false et puis augmentez sa hauteur. AutoSize=true va agrandir la largeur du label pour l'adapter à tout le texte, mais sur une seule ligne.

    Vous pouvez également utiliser la méthode TextRenderer.MeasureText pour mesurer la largeur et la hauteur attendues du texte en pixels lorsqu'il sera affiché dans le label. En utilisant cette méthode et en obtenant la hauteur du texte et la largeur souhaitée et en supposant également que chaque ligne de texte dans le label a une hauteur constante, vous pouvez ajuster la largeur/hauteur du label entier en fonction de vos besoins.

    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 29 avril 2021 11:52
    Modérateur
  • Ah, il faut que je creuse un peu l'utilisation de AutoSize, là il est true, avec MaximumSize spécifié ça permet d'avoir le texte qui s'affiche dans le rectangle imparti, en revanche effectivement pour mesurer la hauteur ce n'est pas ça.

    Apparemment TextRenderer va me permettre d'avancer sur la phase suivante, qui consiste à opérer les césures aux bons endroits.

    Je regarde ça un peu plus en profondeur et je reviens, merci.

    jeudi 29 avril 2021 12:21
  • À ce que je comprends on peut utiliser l'un ou l'autre, donc il vaut autant finir de comprendre l'un avant d'attaquer l'autre.

    Avec AutoSize = true, Size s'ajuste jusqu'à concurrence de MaximumSize.

    Avec AutoSize = false, je vois que je dois fixer moi-même Size à la valeur de MaximumSize.

    Je me rends toutefois compte que Height est la même que le texte tienne en une ligne ou soit affiché sur deux. Donc, il doit y avoir quelque chose que j'ai mal compris.

    D'ailleurs, si je ne mets pas l'instruction pour préciser Height, la hauteur est moindre, mais elle reste fixe, et correspond à ce qu'il faut pour une ligne. Du coup, quand il y a du texte pour deux lignes, tout ne s'affiche pas.

    C'était bien l'intérêt du AutoSize de régler ce problème, mais à ce que je comprends on doit pouvoir le régler sans, et ainsi connaître la hauteur prise par le texte. Mais je n'ai pas réussi à mettre ça en œuvre.

    • Modifié Gloops jeudi 29 avril 2021 13:23
    jeudi 29 avril 2021 12:53