为RichTextBox分配相同的值不起作用

时间:2012-01-05 15:46:55

标签: c# .net c#-4.0

我有一个RichTextBox。我正在提取内容并分配给相同的RichTextBox(这是针对realitime texteditor),RichTextBox在我给出换行符后不接受超过1个字符。我通过将值分配给另一个RichTextBox进行测试,如果工作正常。有人可以查看下面的代码吗?

private void richTextBox_TextChanged(object sender, EventArgs e)
{
    string str = richTextEditor.Text;
    string strMod = "";
    richTextEditor.Clear();

    if (str.Contains('\n'))
    {
        string[] strArr = str.Split('\n');

        for (int i = 0; i < strArr.Count(); i++)
        {
            strMod += strArr[i];
            strMod += Environment.NewLine;
        }
    }
    else
    {
        strMod = str;
    }

    richTextEditor.AppendText(strMod);
} 

2 个答案:

答案 0 :(得分:1)

您正在向最后一行添加NewLine。修正:

    for (int i = 0; i < strArr.Length; i++) {
        strMod += strArr[i];
        if (i < strArr.Length - 1) strMod += Environment.NewLine;
    }

或者只是简单地说:

    strMod = String.Join(Environment.NewLine, strArr);

还要注意此代码会导致TextChanged事件再次触发。你现在正在逃避它,因为你实际上并没有改变任何东西。但那运气很快就会消失。使用bool标志来防止重入引起麻烦:

    private bool changingText = false;

    private void richTextEditor_TextChanged(object sender, EventArgs e) {
        if (changingText) return;
        changingText = true;
        try {
            // etc...
        }
        finally {
            changingText = false;
        }
    }

答案 1 :(得分:0)

在第一个新行之后,您将在此处添加一个额外的新行:

for (int i = 0; i < strArr.Count(); i++)
{
    strMod += strArr[i];
    strMod += Environment.NewLine;
}

所以,如果我输入:

    Text
    M

我会得到

    Text
    M

您在文本更改的最后一个条目之后添加了一个额外的行,这意味着任何新字符确实会触发拆分并添加新行。

查看我的评论。你为什么要这样做?你想要完成什么?


编辑:

有一种更简单的方法,使用Hans Passant的布尔标志:

private bool changingText = false;

private void richTextEditor_TextChanged(object sender, EventArgs e)
{
    if (changingText) return;
    changingText = true;

    try
    {
        string str = richTextEditor.Text.Replace("\n", Environment.NewLine);
        richTextEditor.Clear();
        richTextEditor.AppendText(str);
    }
    finally
    {
        changingText = false;
    }
}

然而,我之前的言论仍然存在:这实际上是一个不合适的操作,它会在每次改变时迫使插入符号结束。