Autoscale Police dans un Contrôle de zone de texte de sorte que son plus grand possible et s'inscrit toujours dans la zone de texte limites
J'ai besoin d'une zone de texte ou un certain type de Multi-Label de la Ligne de contrôle qui ajuste automatiquement la taille de police pour le rendre aussi grand que possible et encore de l'intégralité du message s'adapter à l'intérieur des limites de la zone de texte.
Je voulais voir si quelqu'un avait mis en place un contrôle de l'utilisateur comme ceci avant de développer mon propre.
Exemple d'application: avoir une zone de texte qui sera la moitié de la zone sur un formulaire windows. Lorsqu'un message qui sera d'environ 100 à 500 caractères, il va mettre tout le texte dans le contrôle et la police aussi grande que possible. Une mise en œuvre qui utilise Mono pris en charge .Bibliothèques NET serait un plus.
Savoir si l'on a mis en place un contrôle déjà... Si quelqu'un sait comment faire pour tester si un texte s'adapte complètement à l'intérieur de la zone de texte qui serait utile si je tire mon propre contrôle.
Edit: j'ai fini par écrire une extension de RichTextBox. Je vais poster mon code, peu de temps une fois que j'ai vérifié que tous les problèmes sont résolus.
OriginalL'auteur blak3r | 2009-04-26
Vous devez vous connecter pour publier un commentaire.
J'ai eu à résoudre le même problème de base. L'itératif des solutions ci-dessus ont été très lents. Donc, je l'ai modifié avec le suivant. Même idée. Utilise simplement calculé les ratios au lieu de itératif. Probablement, pas tout à fait aussi précis. Mais, beaucoup plus rapide.
Pour mon one-off besoin, j'ai juste jeté un gestionnaire d'événement sur l'étiquette de la tenue de mon texte.
OriginalL'auteur GinoA
Je n'ai pas vu un contrôle existant pour ce faire, mais vous pouvez le faire à la dure à l'aide d'un RichTextBox et le TextRenderer de savoir measuretext méthode et à plusieurs reprises le redimensionnement de la police. Il est inefficace, mais il fonctionne.
Cette fonction est un gestionnaire d'événements pour l' 'TextChanged de l'événement sur un RichTextBox.
Un problème que j'ai remarqué:
Lors de la saisie, la zone de texte faites défiler jusqu'à l'actuelle de signe, même si les barres de défilement sont désactivés. Cela peut entraîner dans la ligne du haut ou à gauche arriver haché jusqu'à ce que vous revenir en haut ou à gauche avec les touches fléchées. Le calcul de la taille est correcte en supposant que vous pouvez obtenir la ligne supérieure de l'affichage en haut de la zone de texte. J'ai inclus quelques défilement code qui permet parfois (mais pas toujours).
Ce code suppose le retour à la ligne est désactivée. Il peut être nécessaire de modification si le retour est activé.
Le code:
OriginalL'auteur Steven Richards
La solution je suis venu avec était d'écrire un contrôle qui s'étend de la norme de contrôle RichTextBox.
Utiliser le contrôle étendu de la même manière que vous le feriez régulièrement un contrôle RichTextBox avec les améliorations suivantes:
Cette commande combine plusieurs techniques pour déterminer si le texte s'inscrit toujours au sein de ses limites. Si la zone de texte multiligne, il détecte si les barres de défilement sont visibles. J'ai trouvé un moyen astucieux pour détecter si oui ou non les barres de défilement sont visibles sans aucune winapi appels à l'aide d'une habile technique que j'ai trouvé sur l'un des Patrick Smacchia postes.. Lorsque multiligne n'est pas vrai, vertical, les barres de défilement n'apparaissent jamais si vous avez besoin d'utiliser une technique différente qui repose sur le rendu du texte à l'aide d'un objet Graphics. Le Graphique technique de rendu n'est pas adapté pour Multiligne boîtes parce que vous auriez à compte pour mot d'habillage.
Voici quelques extraits de code qui montre comment ça marche (lien vers le code source est fourni ci-dessous). Ce code pourrait facilement être utilisé pour étendre à d'autres contrôles.
ScaleFontToFit pourrait être optimisée pour améliorer les performances, mais j'ai gardé les choses simples de sorte qu'il serait facile à comprendre.
Télécharger le dernier code source ici. Je suis encore à travailler activement sur le projet que j'ai développé ce contrôle de sorte qu'il est probable que je vais être en ajoutant un peu d'autres fonctionnalités et améliorations dans un avenir proche. Alors, consultez le site de la dernière version du code.
Mon but est de faire ce travail de contrôle sur Mac en utilisant le framework Mono.
OriginalL'auteur blak3r
J'avais une exigence similaire pour une zone de texte dans un panneau sur un formulaire windows hébergé fenêtre. (J'ai injecté le panneau sur le formulaire existant). Lorsque la taille du panneau change (dans mon cas), le texte s'adaptent à la boîte. Code
OriginalL'auteur zackrspv