TextBox文本“;替换“;函数工作不正常
本文关键字:工作 不正常 函数 替换 TextBox 文本 | 更新日期: 2023-09-27 18:21:52
我已经看过类似的问题,但没有帮助。
我正在使用windows窗体。我有按钮1和文本框1。
我正在尝试替换(或删除)textBox1中所选的文本,并输入新的字母(字母A)来代替它。
该代码适用于随机混合的数字和字母例如:
385F1选择8,然后结果=3A5F1(用A代替8)
H74S31B选择4S,结果=H7A31B
KQ5689选择Q5689,结果为KA
所以它工作得很好,但当我从由相同数字或字母组成的字符串中选择一个数字或字母时,它就不工作了,例如:
6667777222333选择任意7,则结果=666AAA222333(不是工作)
9992244GG选择任意9,则结果=AAA2244GG(不工作)
QQQHHUUU选择任意Q,则结果=AAAHHHUUU(不工作)
QQQHHUUU选择任何QH,则结果=QQAHHUUU(当选择不同的字母)
4433366选择333,则结果=44A66(当全部相同时有效选择数字)
希望我解释得好。我不知道是什么原因导致了这种行为。请帮忙。谢谢
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函数返回字符串。在您的示例中(6667777222333选择任意7,然后结果=666AAA222333(无效)),返回"7"。但是Text.Replace将替换所有出现的7。这不是你想要的。您可以使用string.Remove
和string.Insert
,而不是使用string.Replace
函数
textBox1.Text = textBox1.Text.Remove(textBox1.SelectionStart, textBox1.SelectionLength).Insert(textBox1.SelectionStart, "A");
但对于大型字符串来说,这可能不是很有效。StringBuilder
会更好。
问题是由string.Replace
函数的使用引起的。
可以简单地完成您想要完成的任务
if (textBox1.SelectionLength > 0)
textBox1.SelectedText = "A";
无需保存/设置选择开始。