2016-03-26 18 views
5

Chciałem wiedzieć, jak do zawijania tekstu w C#, gdy natknąłem się na bardzo dobre rozwiązanie mojego problemu na tekst zawijający tekst w linii in this URL. Niestety, nie mam wystarczającej reputacji zapytać OP bezpośrednio o jeden specyficzny problemem mam (i najprawdopodobniej osoby zajmujące się tym będzie o nieskończoność)Jak wykryć przepełnienie łańcucha z linii w C#?

Opis problemu:
mogę word-wrap ciąg jeśli to słowo musi być opakowane z tym kodem:

Graphics PAddress = e.Graphics; 

SizeF PAddressLength = PAddress.MeasureString("Residential Address: " + RAddressTextBox.Text, new Font(fontface, fontsize, FontStyle.Regular),700); 

PAddress.DrawString("Residential Address: "+PAddressLength + RAddressTextBox.Text, new Font(fontface, fontsize, FontStyle.Regular), Brushes.Black, new RectangleF(new Point(pagemarginX, newline()),PAddressLength),StringFormat.GenericTypographic); 

jednak nie mogłem znaleźć miejsce do otrzymania spust, gdy słowo długości przelewa z jednej linii.

np
W LINE-2 tego kodu, gdy długość słowa przekracza 700px, to przesuwa się do następnej. Robi to, podążając za RectangleF do wordwrap. Robi się to automatycznie, ponieważ jest to problem, ponieważ trudno jest stwierdzić, czy przekroczył 700 pikseli, czy nie.

Jest to format, w którym informacja jest wyświetlana, gdy próbowałem wydrukować PAddressLength:

{width = 633,1881, wysokość = 47,14897}

myślę, że jeśli mogę wyodrębnić wartość szerokości od tego przy użyciu PAddressLength.Width, to mogę częściowo rozwiązać ten problem. Ale z tym, będę musiał obliczyć jeśli pozostała przestrzeń (tj 700px - 633.1881px) zmieści następne słowo, czy nie (jeśli istnieje)

rozbicie problemu:

  • I już już wiem, jak owijać tekst, gdy jest ciąg dłuższy niż to, co określa się przy użyciu Graphics.MeasureString, jak podano w this solution w innym pytaniu.
  • Ale^proces odbywa się automatycznie, więc chcę wiedzieć jak wykryć, czy słowo-wrap wystąpił (i jak może linie stało owinięte każda linia jest 700px szerokości maksimum)
  • muszę znać liczbę linii, które zostały opakowane:, aby poznać liczbę wykonanych funkcji newline(), która daje odpowiedni odstęp między wierszami po wykonaniu za każdym razem.

Dodatkowo (premia pytanie, co może lub maynot rozwiązać) Czy istnieje jakiś sposób, aby wyodrębnić wartość 633.1881 a następnie obliczyć, czy następne słowo pasuje (700 - 633,1881) px spacja czy nie?

+0

Można rozważyć Porównując oczekiwaną wysokość pomiaru wysokiego ciąg jak „x |^a” z uzyskanej wysokości pomiar. Jeśli jest to wielokrotność, wiesz, ile linii zaowocowało. – TaW

Odpowiedz