文本框中的换行符

时间:2011-11-24 15:38:38

标签: c# asp.net line-breaks

我有文本框,应该用于将格式化文本发送到远程应用程序,我应该格式化它,以便在最近的空间中打破到第30个字符(包括空格),并且该行被破坏的空间应该被删除,所以它没有被带到下一行。当然,它应该在文本的末尾执行(中断,再次开始计数,中断等)。 - 其他事情是格式化文本的字符应该从计数中排除。 我有解决方案,在SO上找到,但它适用于一行。

string sTemp = textBox1.Text.Substring(0, 30);
sTemp = sTemp.Replace(" @A ", "");
sTemp = sTemp.Replace("@A ", "");
sTemp = sTemp.Replace(" @A", "");
sTemp = sTemp.Replace("@A", "");

sTemp = sTemp.Replace(" @B ", "");
sTemp = sTemp.Replace("@B ", "");
sTemp = sTemp.Replace(" @B", "");
sTemp = sTemp.Replace("@B", "");

int numberOfLeak = 30 - sTemp.Length;
var x = 30 + numberOfLeak;
if (textBox1.Text.Length > x)
{
    textBox1.Text = textBox1.Text.Insert(x, Environment.NewLine);
} 

有人可以帮助使这项工作多行,直到文本结束?

提前致谢。

2 个答案:

答案 0 :(得分:2)

<input type="text" />(为asp:textbox生成的默认标记)应该只有一行文本。 您应该通过将 TextMode 属性设置为 多行 来使用textarea:

<asp:TextBox TextMode="MultiLine" runat="server" ID="mytextarea"></asp:TextBox>

修改

我来了这段简单的代码。它将最近的空格替换为range位置(因此在此点之前或之前):

int range = 10;
string txt = "helloooooo mister how do you do";

for (int i = range; i < txt.Length - 1; i = i + range + 2)
{
    int closestPosition = txt.IndexOf(" ", i) > txt.LastIndexOf(" ", i)
                              ? txt.IndexOf(" ", i)
                              : txt.LastIndexOf(" ", i);

    txt = txt.Remove(closestPosition, 1).Insert(closestPosition, Environment.NewLine);
}

它返回以下字符串:

"helloooooo\r\nmister how\r\ndo you do"

答案 1 :(得分:0)

如果该解决方案适用于一行,只需将其放入方法中并在每个行的循环中调用它。 e.g。

    // put the lines in an array
    string[] result = textBox1.Text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);

    StringBuilder output = new StringBuilder();

    foreach (string line in result)
    {
        output.AppendLine(WorkingSolutionForOneLine(line));
    }

    string finalResult = output.ToString();

使用WorkingSolutionForOneLine方法作为您在问题中发布的工作方法:

string WorkingSolutionForOneLine(string line)
{
    string sTemp = line.Substring(0, 30);
    sTemp = sTemp.Replace(" @A ", "");
    sTemp = sTemp.Replace("@A ", "");
    sTemp = sTemp.Replace(" @A", "");
    sTemp = sTemp.Replace("@A", "");

    sTemp = sTemp.Replace(" @B ", "");
    sTemp = sTemp.Replace("@B ", "");
    sTemp = sTemp.Replace(" @B", "");
    sTemp = sTemp.Replace("@B", "");

    int numberOfLeak = 30 - sTemp.Length;
    var x = 30 + numberOfLeak;
    if (line.Length > x)
    {
        line = line.Insert(x, Environment.NewLine);
    }
    return line;
}