2016-08-30 1 views
0

Je dois imprimer un document tabulaire, chaque ligne est composée de chiffres et de colonnes de texte. Le texte d'une colonne de texte peut contenir des identificateurs tels que 1K2016-000345 contenant un trait d'union. J'utilise Graphics.MeasureString et Graphics.Drawstring pour déterminer la largeur et la hauteur du rectangle nécessaire pour afficher le texte dans la colonne, de sorte qu'il peut également être multiligne. Malheureusement, parfois, les identificateurs ci-dessus, s'ils sont le dernier mot de la ligne, sont enveloppés au trait d'union qui rend l'identifiant difficile à lire.Windows Forms Graphics.Drawstring éviter l'emballage au trait d'union

Y at-il un moyen d'éviter ce comportement? Soit en quelque sorte marquer l'identifiant dans son ensemble ou le trait d'union comme non enveloppable?

+0

Si les données sont « tableau », puis il obtient d'être assez important de placer la colonnes vous-même. Si vous ne le faites pas, les colonnes ne seront pas alignées. Sauf si vous utilisez une police à hauteur fixe et, eh bien, pouah. –

+0

Merci Hans. Je positionne les colonnes bien sûr et j'utilise des polices proportionnelles. La liste est un "Kassajournal" contenant un numéro courant, la date et l'heure, le type, l'identificateur de document, la description et trois autres colonnes d'argent. Tout correspond parfaitement à l'alignement gauche/droite. Seulement dans la colonne de description j'ai le problème que le texte est parfois plus long que la largeur de la colonne de sorte que je dois emballer le texte dans une ligne supplémentaire. Mais si la description contient un identifiant de document avec un trait d'union, il est coupé au milieu de l'identifiant du document. –

Répondre

1

Vous devez utiliser une surcharge de Graphics.MeasureString() qui prend un paramètre StringFormat et définissez la propriété FormatFlags de cette StringFormat-StringFormatFlags.NoWrap:

g.MeasureString(text, font, origin, new StringFormat(StringFormatFlags.NoWrap)); 
+0

Merci René. J'ai essayé votre suggestion pour mesurer la chaîne avec le drapeau NoWrap. Si j'imprime avec ce drapeau, seule la première partie du texte est imprimée et coupée au trait d'union. –

+0

@pb_SKAT Je suis actuellement afk mais je pense qu'il existe un autre drapeau 'NoClip' qui pourrait résoudre ce problème. Je vais vérifier demain (utc + 1 ici, même pour vous je suppose) –

+0

@pb_SKAT suppose que vous avez besoin des mêmes drapeaux pour 'DrawString' (pas seulement' MeasureString') –