如何在文本包含在窗口中的文本中插入硬换行符?

时间:2012-05-06 10:10:03

标签: c# windows

这个问题始于有人想要将Word文档中的每个明显的“文本行”导入Excel表格中的一行,但我相信如果没有一些开发,这是不可能的。

我想在窗口中显示字符串包装到新行的每个点处插入换行符(无论可配置为什么)。我怎样才能做到这一点?我想我需要查询窗口并获取其文本行的数组,然后计算每行中的字符,并在原始字符串中,在为该行显示的字符数之后插入换行符。

我当然意识到改变窗口大小会使这段代码的所有工作无效我问的是如何编写,但这不是一个相关的问题。

有用的信息: 我找到了原始的Word到Excel导出问题的解决方案。当您将Word文档另存为文本文件时,之后单击“保存”对话框中的保存,您将看到另一个对话框,其中包含插入换行符的选项。

2 个答案:

答案 0 :(得分:0)

您可以做的是获取显示控件的宽度及其使用的字体,然后使用GetTextMetrics获取可用于查找每个字符宽度的TEXTMETRIC struct。这非常复杂,因为它考虑了所有不同的角色配置文件。

更简单的方法是使用GetTextExtentPoint32,给定字符串和字体属性,将返回其宽度(以像素为单位)。因此,您可以粗略估计换行符的位置,在该子串上调用此函数,并在GetTextExtentPoint32的结果小于文本控件的宽度时插入换行符。

干杯。

答案 1 :(得分:0)

你可以做的是这样的事情:

int width = txtBox.width;
Graphics g = CreateGraphics();

SizeF size = g.MeasureString(myText, txtBox.Font);

if (size.Width > width)
{
    int i = 0;
    List<string> lines = new List<String>();
    string str = "";
    while (i<myText.Length)
    {

        str = str + myText.SubString(i,1);
        int w = (int)(g.MeasureString(str, txtBox.Font).Width);
        while (w<width && i<myText.Length)
        {
             i++;
             str = str + myText.SubString(i,1);
        }
        str = str + '\n';
    }

    // str now contains your newline formatted string
    return str;
}
return myText;