尝试调整矩形大小时,矩形的宽度增加得比应有的多

Rectangle's width increasing more than it should while trying to resize the rectangle

我觉得标题不对。但是请查看下面的图片以获得更好的演示。

我有一个适合其中文本的矩形。我想要做的是,如果矩形的高度大于屏幕,那么矩形应该调整大小。

调整大小如下:将高度设置为屏幕高度,增加宽度,尝试适应文本,重复。

这是解析我的文本的方法,它 returns 适合给定宽度的矩形的字符串。

private String parseText(String text, int Width)
{
    String line = String.Empty;
    String returnString = String.Empty;
    String[] wordArray = text.Split(' ');
    int i = 1;
    foreach (String word in wordArray)
    {
        if (Font.MeasureString(line + word).Length() > Width)
        {
            returnString = returnString + line + '\n';
            line = String.Empty;
            i++;
        }

        line = line + word + ' ';
    }
    this.Size = new Size(Size.Width, (int)Font.MeasureString(returnString + line).Y);
    return returnString + line;
}

这部分效果很好。但是,如果文本超过高度,文本将绘制在矩形之外。 所以我添加了这个:

public string Text
{
    get { return text; }
    set
    {
        temp = parseText(value.Replace("\n", ""), Size.Width);
        while(Size.Height > Viewport.Height)
        {
            Size = new Size(Size.Width + 5, Viewport.Height);
            temp = parseText(value, Size.Width);
        }
        text = temp;
    }
}

这是我的问题:

Part 1: Text is ok. Does not hit the screen's edge

Part 2: Right after hitting the screen edge by adding a bunch of 'hello'

Part 3: Adding one more "hello" properly fixes the issue.

第 2 部分发生了什么?它是如何调整大小的?为什么在第 3 部分修复了它?

注意:无论我在此处添加什么:Size = new Size(Size.Width + 5, Viewport.Height);屏幕的 +5 或 5%,或者 20% 或 200%,它仍然会调整为相同的大小。

评论了解更多信息。谢谢

通过在 temp = parseText(value, Size.Width);

中添加 value.Replace("\n", "") 进行修复

我是在 while 循环之前这样做的,但不是在循环内部。因此,文本得到一堆新行,当再次调用时,新行在 while 循环之前消失了。

它应该是这样的:temp = parseText(value.Replace("\n", ""), Size.Width - (int)LeftMargin);