C# 文本框文本“;替换“;功能不正常
我已经在这里研究过类似的问题,但没有帮助 我正在使用windows窗体。我有按钮1和文本框1 我正在尝试替换(或删除)textBox1中选定的文本,并输入新的字母(字母A)替换它 该代码适用于随机混合数字和字母 例如: 385F1选择8,然后结果=3A5F1(8替换为A) H74S31B选择4S,结果为=H7A31B KQ5689选择Q5689,结果为KA 所以它工作得很好,但当我从由相同数字或字母组成的字符串中选择一个数字或字母时,它就不工作了,例如: 666777222333选择任意7,然后结果=666AAA222333(非 工作) 9992244GG选择任意9,则结果=AAA2244GG(不工作) qqhhhuuu选择任意Q,然后结果=AAAHHHUUU(不工作) QQQHHUUU选择任意QH,然后结果=QQAHHUU(当 (选择不同的字母) 4433366选择333,结果=44A66 数字(已选定) 希望我能解释清楚。我不知道是什么导致了这种行为。请帮忙。多谢各位C# 文本框文本“;替换“;功能不正常,c#,string,replace,C#,String,Replace,我已经在这里研究过类似的问题,但没有帮助 我正在使用windows窗体。我有按钮1和文本框1 我正在尝试替换(或删除)textBox1中选定的文本,并输入新的字母(字母A)替换它 该代码适用于随机混合数字和字母 例如: 385F1选择8,然后结果=3A5F1(8替换为A) H74S31B选择4S,结果为=H7A31B KQ5689选择Q5689,结果为KA 所以它工作得很好,但当我从由相同数字或字母组成的字符串中选择一个数字或字母时,它就不工作了,例如: 666777222333选择任意7,然后
public partial class Form1 : Form
{
int TxTindex;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ActiveControl = textBox1;
textBox1.Focus();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Focus();
if (textBox1.SelectedText.Length > 0) // to check if any text selected
{
TxTindex = textBox1.SelectionStart; // save the caret position
textBox1.Text = textBox1.Text.Replace(textBox1.Text.Substring(textBox1.SelectionStart, textBox1.SelectionLength),"A");
textBox1.SelectionStart = TxTindex + 1; // place the caret after the inserted string
}
else
{
return;
}
}
}
你的问题是:
textBox1.Text = textBox1.Text.Replace(textBox1.Text.Substring(textBox1.SelectionStart, textBox1.SelectionLength),"A");
Substring函数返回string。在您的示例中(666777222333选择任意7,然后结果=666AAA222333(不工作)),它返回“7”。但是Text.Replace将替换所有出现的7。那不是你想要的。您可以做的是,不要使用string.Replace
函数,而是使用string.Remove
和string.Insert
textBox1.Text = textBox1.Text.Remove(textBox1.SelectionStart, textBox1.SelectionLength).Insert(textBox1.SelectionStart, "A");
但这对于大型字符串可能不是很有效。
StringBuilder
会更好。问题是由于使用了string.Replace
函数造成的
你想要完成的事情可以通过简单的方法来完成
if (textBox1.SelectionLength > 0)
textBox1.SelectedText = "A";
无需保存/设置选择开始。
String.Replace
将替换所有实例,而不仅仅是一个实例。为什么不使用String.Substring
删除所选字符?此外,你可能会让谷歌搜索这个问题…@LukePark,同样的事情也可能发生在90%的问题上。按照你的逻辑,他们可能会关闭网站。@LucMorin,除非他们不关闭网站。堆栈溢出适用于尚未找到答案的问题。这个问题,百分之百确定,已经有了答案。随着新框架的发布、标准的改变,将会有一些问题没有答案。@LukePark如果问题已经得到了答案,那么只需将该问题标记为重复问题,并指向现有答案即可。你的评论没有任何价值。卢克·帕克。第一:如果你是专业人士,我是初学者,我不会等你告诉我去谷歌搜索,我一直在四处寻找答案,但没有运气,这个网站是我最后的选择,所以如果我自己找不到答案,就把它贴在这里。第二:我已经查过其他帖子了。然而,正如Luc Morin所说:你的论点没有任何价值。