如何正确附加文本以替换部分原始文本

时间:2015-06-12 22:26:05

标签: c# winforms

我在将文本插入文本框时遇到问题。实际上我要做的是从'richTextBox1'复制一段文本,处理它然后将处理过的数据插入'richTextbox2'(上面的'richTextBox2'中已有文本。已处理的文本应该在下面。

我遇到的问题是,每当我点击一个按钮来处理而不是替换文本时,它只会添加另一个文本块。我不知道如何更换它而不是添加它。

例如,我的richTextbox2最初看起来像这样:

  

“你好”,我的名字是布鲁斯

     

我点击btnVowels,它看起来像这样:

  

您好,我的名字是布鲁斯

           

“Hll”,我的nm s Brc

上面很好,但问题是现在如果我点击btnAlpha,它会显示:

  

您好,我的名字是布鲁斯

           

“Hll”,我的nm s Brc您好我的名字是布鲁斯

我想要它去:

  

“你好”,我的名字是布鲁斯

           

您好,我的名字是布鲁斯

有人有什么想法吗?

/* already at start of richTextBox2 when clicking on a different button:

string nl = System.Environment.NewLine;
string copyText = richTextBox1.Text;
richTextBox2.Text = copyText;

richTextBox2.AppendText(lineBreak + "----------------------" + lineBreak);

*/


private void btnVowels_Click(object sender, EventArgs e)
{
    string copyText = richTextBox1.Text;
    string vowels = "AaEeIiOoUu";
    copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());

    richTextBox2.AppendText(copyText);
}

private void btnAlpha_Click(object sender, EventArgs e)
{
    string copyText = richTextBox1.Text;
    string nonAlpha = @"[^A-Za-z ]+";
    string addSpace = "";
    copyText = Regex.Replace(copyText, nonAlpha, addSpace);

    richTextBox2.AppendText(copyText);
}

更新:

仍然没有让它工作,我已经设置了一个名为divider的字符串,这是-----------行,并尝试看看我是否可以选择然后粘贴但没有运气因为我点击按钮后无法识别调试器中的copyText:

 private void btnVowels_Click(object sender, EventArgs e)
    {


 int startingIndex = richTextBox2.Find(divider);
 string copyText = richTextBox1.Text;
 string vowels = "AaEeIiOoUu";
 copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());
 richTextBox2.Select(startingIndex, divider.Length);

 richTextBox2.SelectedText = copyText;

    }

2 个答案:

答案 0 :(得分:2)

AppendText只会将文字追加到最后,这不是您想要的。相反,您必须找到要替换的文本并选择它。选择后,您可以覆盖它。

这是一个完整的例子。 Form将其RichTextBox设置为

  

“你好”,我的名字是布鲁斯。

然后,当点击该按钮时,它会将"Hello"替换为Hi

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Get the starting index for the content we want to replace.
        int startingIndex = richTextBox1.Find("\"Hello\"");

        // Select the content to be replaced.
        richTextBox1.Select(startingIndex, "\"Hello\"".Length);

        // Replace the content.
        richTextBox1.SelectedText = "Hi";
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        richTextBox1.Text = "\"Hello\", my name is Bruce";
    }
}

修改

此更新向您展示了如何查找分隔线,获取下一行中第一个字符的索引,然后选择文本的其余部分。然后我们可以替换它。

private void btnVowels_Click(object sender, EventArgs e)
{
    string copyText = this.RemoveVowelsFromString(richTextBox1.Text);  
    richTextBox2.AppendText(copyText);
}

private void btnAlpha_Click(object sender, EventArgs e)
{
    string copyText = richTextBox1.Text;
    string nonAlpha = @"[^A-Za-z ]+";
    string addSpace = "";
    copyText = Regex.Replace(copyText, nonAlpha, addSpace);

    // Replace the content beneath the divider
    string divider = "------------";

    // Find the first char index of the divider line
    int dividerIndex = richTextBox2.Find(divider);

    // grab the line number that the divider is on
    int dividerLine = richTextBox2.GetLineFromCharIndex(dividerIndex);

    // get the first char on the line following the divider
    int startingIndex = richTextBox2.GetFirstCharIndexFromLine(dividerLine+1);

    // Select everything starting after the divider to be replaced.
    richTextBox2.Select(startingIndex, richTextBox2.Text.Length - startingIndex);

    // Replace the content.
    richTextBox1.SelectedText = copyText;
}

private string RemoveVowelsFromString(string content)
{
    string vowels = "AaEeIiOoUu";
    copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());

    return copyText;
}

答案 1 :(得分:0)

好像你不需要复制原始字符串

string nonAlpha = @"[^A-Za-z ]+";
string addSpace = "";
richTextBox1.Text = Regex.Replace(richTextBox1.Text, nonAlpha, addSpace);