C# 如何正确追加文本以替换部分原始文本
我在将文本插入文本框时遇到问题。实际上,我试图做的是从“richTextBox1”复制一段文本,对其进行处理,然后将处理后的数据插入到“richTextbox2”中(上面的“richTextbox2”中已经有文本。处理后的文本应该放在下面) 我的问题是,每次我点击一个按钮来处理而不是替换文本,它只会添加另一个文本块。我不知道如何替换它而不是添加它 例如,我的richTextbox2一开始看起来像这样: “你好”,我叫布鲁斯C# 如何正确追加文本以替换部分原始文本,c#,winforms,C#,Winforms,我在将文本插入文本框时遇到问题。实际上,我试图做的是从“richTextBox1”复制一段文本,对其进行处理,然后将处理后的数据插入到“richTextbox2”中(上面的“richTextbox2”中已经有文本。处理后的文本应该放在下面) 我的问题是,每次我点击一个按钮来处理而不是替换文本,它只会添加另一个文本块。我不知道如何替换它而不是添加它 例如,我的richTextbox2一开始看起来像这样: “你好”,我叫布鲁斯 我点击btnVowels,它看起来像这样: 你好,我叫布鲁斯 “Hl
我点击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;
}
AppendText
只会将文本追加到末尾,这不是您想要的。相反,您必须找到要替换的文本并将其选中。一旦选中,您可以覆盖它
这是一个完整的示例。表单将其RichTextBox设置为
“你好”,我叫布鲁斯
然后,当单击按钮时,它将用Hi
替换“Hello”
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;
}
似乎不需要复制原始字符串
string nonAlpha = @"[^A-Za-z ]+";
string addSpace = "";
richTextBox1.Text = Regex.Replace(richTextBox1.Text, nonAlpha, addSpace);
这是WinForms还是WPF?为什么不richTextBox2.Text=copyText;而不是AppendText?@JohnathonSullinger Windows窗体应用程序如何在不知道添加标记的情况下到达1k rep?他指的是在Stackoverflow问题中添加WinForms标记。这是WinForms特有的,不一定是C#。我认为他不想替换文本框的所有内容。相反,他只想替换文本框中的适用内容。乔纳森所说的,只有适用内容(下面的内容).我在顶部将其称为未处理的内容,在底部将其称为已处理的内容,只有已处理的文本可以替换,未处理的文本不会被触碰。那么为什么不只设置两个文本框呢?规范规定,它必须是未处理的数据,后跟------------------然后再后跟下面已处理的数据。所有这些都必须在一个pla中谢谢,有一个小问题我想不出来,然后我就不打扰你了,这一行:
richTextBox2.Select(startingIndex,richTextBox2.Length-startingIndex)
Length下面有一条摆动的线,因为它无法处理该方法,finds.TextLength但当我运行程序时,它会与该行代码相匹配。对不起,这就是我在手机上做示例的结果。你需要做richTextBox.Text.Length-startingIndex
。我会更新我的答案以匹配它。我以前也尝试过这一点ut no give,不断出现:System.Windows.Forms.dll中发生“System.ArgumentOutOfRangeException”类型的未处理异常。其他信息:InvalidArgument=Value'-1'对“start”无效。-1表示找不到您正在查找的行。请查看上的MSDN文档,是否有替代方法我可以在哪里创建一个空对象并将更改放在那里?那么如果我创建了richTextBox2.AppendText(“帮助”+分隔符+块);
是否有一种方法可以将块全局设置为一个对象,并且对于单击的每个按钮,只替换该块中的文本?