动态地在字符串中插入换行符

时间:2015-12-31 00:42:13

标签: c#

我有TextBox我需要显示一些文字。文本的长度是动态的,因此需要将其包装以适合多行。

一行的最大长度为50个字符。如果文字不止于此,我需要添加换行符\n

例如,如果文本是165个字符:

  1. 在第51个位置添加\n
  2. 在第102个位置添加\n
  3. 在第153个位置添加\n
  4. 所以最后文本的总长度将是168个字符。

    我知道如何使用循环执行此操作。但我的问题是,这可以在没有太多代码的情况下完成吗? String类是否有提供该函数的方法?

    这是一个Windows窗体应用程序,但包括TextBox在内的所有控件都是以编程方式创建的。

1 个答案:

答案 0 :(得分:3)

对于Windows窗体应用程序

您可以使用WordWrap属性,将其设置为true。

如果你想动态地

您可以在代码中执行此操作:

myTextBox.WordWrap = true;
myTextBox.Multiline = true;

如果您想在UI

中执行此操作

选择文本框,然后按 F4 。搜索WordWrap,并将其设置为true。

另外,不要忘记将TextBox设置为多行

Working sample

@Don因为您说使用WordWrap不适合您,您可以尝试使用正则表达式,如下面的代码:

using System.Linq;
using System.Text.RegularExpressions;

private void Form1_Load(object sender, EventArgs e)
{
    var textBox = new TextBox
    {
        Multiline = true,
        WordWrap = false,
        Width = 295,
        Height = 100,
        ReadOnly = true
    };

    var textFromDatabase = "1234567890 1234567890 1234567890 1234567890 111150dasdasds1234567890 1234567890 1234567890 1234567890 111150dasdasds1234567890 1234567890 1234567890 1234567890 1111";

    var strings = Regex.Matches(textFromDatabase, ".{0,50}");
    var lines = strings.Cast<Match>()
                       .Select(m => m.Value)
                       .Where(m => !string.IsNullOrWhiteSpace(m));
    var @join = string.Join(Environment.NewLine, lines);

    textBox.Text = @join;

    Controls.Add(textBox);
}

请注意,我正在创建一个WordWrap为false且Multiline = true的TextBox。