Mesure d'une Chaîne sans l'aide d'un objet Graphique?
Je suis à l'aide de pixels que celui de l'unité de ma police. Dans un endroit, je suis d'effectuer un coup d'essai pour vérifier si l'utilisateur a cliqué dans le rectangle de délimitation de texte sur l'écran. J'ai besoin d'utiliser quelque chose comme MeasureString
pour cela. Malheureusement, le code en faisant le test de collision est profonde à l'intérieur d'une bibliothèque qui n'ont pas accès à un Graphics
objet ou même un Control
.
Comment puis-je obtenir la boîte englobante d'une chaîne de caractères donnée à la police sans l'aide de la Graphics
classe? Pourquoi ai-je besoin d'un Graphics
de l'objet lors de ma police est en pixels?
- Que faites-vous si vous n'avez pas le Contrôle? Je suis en supposant que la Police et la chaîne, mais est-il autre chose?
- Rien d'autre. Ma bibliothèque est une sorte d'une scène graphique. Je suis en essayant d'éviter les dépendances sur le Système.Le dessin et le Système.De Windows.Les formes
Vous devez vous connecter pour publier un commentaire.
Si vous avez une référence à System.De Windows.Formes, essayez d'utiliser la classe TextRenderer. Il y a une méthode statique (à savoir measuretext) qui prend la corde et la police de caractères et retourne la taille. MSDN Lien
TextRenderer.DrawText(e.Graphics,
DrawText
méthode du premier paramètre est carte Graphique. Ai-je raté quelque chose?WindowsGraphicsCacheManager
. Le manager a une statiqueMeasurementGraphics
bien qui se inited à sa première utilisation. Il le fait en créant un graphique à partir du contexte de périphérique avec un PInvoke à l'gdi32.dll à l'aide de constructeur. NerdFury réponse finalement utilise constructeur et bien sûr, le Graphisme n'est pas mis en cache, mais autrement elles sont de la mêmeSystem.Windows.Forms
juste à la mesure d'une chaîne de caractères, qui peut n'avoir rien à faire avec les formes.Vous n'avez pas besoin d'utiliser l'objet graphique qui vous aide à rendre pour faire la mesure. Vous pouvez créer une statique de la classe utilitaire:
Il pourrait être mériteraient, selon votre situation pour définir la résolution de l'image bitmap en tant que bien.
MeasureString
méthode @NerdFury réponse donnera un plus haut de la chaîne de largeur que prévu.Pour plus d'infos, vous pouvez trouver ici. Si vous souhaitez uniquement à mesurer la longueur physique s'il vous plaît ajouter ces deux lignes :Cet exemple fait un excellent travail d'illustration de l'utilisation de FormattedText. FormattedText fournit un contrôle de bas niveau pour dessiner le texte dans Windows Presentation Foundation (WPF) des applications. Vous pouvez l'utiliser pour mesurer la Largeur d'une chaîne avec une Police particulière, sans l'aide d'un objet Graphique.
Inclure WindowsBase et PresentationCore bibliothèques.
Cela peut ne pas être, mais une répétition des autres, mais mon problème est la non désirés objets Graphiques ainsi. Après l'écoute de l'au-dessus de frustrations, j'ai simplement essayé:
(où le 'contenu' est la chaîne de mesure et cardfont la police, elle est dans)
... et de la chance. Je pourrais utiliser le résultat pour définir la largeur de ma colonne dans VSTO.