Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to detect a string-overflow from a line in C#?

Tags:

c#

word-wrap

I wanted to know how to word-wrap in C# when I came across a very good solution to my problem on word-wrapping text in a line in this URL. Unfortunately, I do not have enough reputations to ask the OP directly about one specific problem I am having(and most likely people dealing with this will be having indefinitely)

Problem Description:
I can word-wrap a string if it needs to be word-wrapped with this code:

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);

However, I could not find the place to receive a trigger whenever the word-length overflows from a single line.

for example:
In LINE-2 of that code, whenever the wordlength exceeds 700px, it moves to the next line. It does that by following the RectangleF to wordwrap. It is doing so automatically, which is a problem since that makes it difficult to know whether it has crossed 700px or not.

This is the format in which information is displayed whenever I tried to print PAddressLength:

{Width=633.1881, Height=47.14897}

I am thinking that If I can extract the value of width from that using PAddressLength.Width ,then I can partially solve this problem. But with that, I will need to calculate if the remaining space(i.e 700px - 633.1881px ) will accommodate the next word or not(if there is one)

BREAKING DOWN THE PROBLEM:

  • I already know how to word-wrap when there is a string longer than what specify by using Graphics.MeasureString as given in this solution in another question.
  • But that^ process happens automatically, so I want to know how to detect if the word-wrap has occured(and how may lines it has wrapped with each line being 700px width maximum)
  • I need to know the number of lines that have been wrapped in order to know the number of times to execute newline() function that I wrote, which gives appropriate line spacing upon executing each time.

ADDITIONALLY, (bonus question; may or maynot solve) Is there some way to extract the value 633.1881 and then calculate whether the next word fits in ( 700 - 633.1881 )px space or not?

like image 713
Siddhant Rimal Avatar asked Oct 18 '22 12:10

Siddhant Rimal


1 Answers

There is an overload to MeasureString that returns the number of lines used in an out parameter: https://msdn.microsoft.com/en-us/library/957webty%28v=vs.110%29.aspx

like image 159
Stuart Whitehouse Avatar answered Nov 09 '22 09:11

Stuart Whitehouse