TextBox文本“替换”功能不能很好地工作

时间:2015-11-14 20:03:00

标签: c# string replace

我已经在这里看过类似的问题,但没有帮助。

我正在使用Windows窗体。我有button1和textbox1。

我正在尝试替换(或删除)textBox1中的所选文本,并输入新的字母(字母A)代替它。

该代码适用于随机混合数字和字母 例如:

  

385F1选择8然后结果= 3A5F1(8替换为A)

     

H74S31B选择4S然后结果= H7A31B

     

KQ5689选择Q5689然后结果是KA

所以它运作良好,但是当我从一个由相同数字或字母组成的字符串中选择一个数字或一个字母时,它就不起作用,例如:

  

666777222333选择任意7然后结果= 666AAA222333(不是   工作)

     

9992244GG选择任意9然后结果= AAA2244GG(不工作)

     

QQQHHHUUU选择任何Q然后结果= AAAHHHUUU(不工作)

     

QQQHHHUUU选择任何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;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

你的问题在这里:

textBox1.Text = textBox1.Text.Replace(textBox1.Text.Substring(textBox1.SelectionStart, textBox1.SelectionLength),"A");

Substring函数返回字符串。在你的例子中(666777222333选择任何7然后结果= 666AAA222333(不工作)),它返回" 7"。但Text.Replace将替换所有出现的7.这不是你想要的。您可以使用string.Replacestring.Remove

,而不是使用string.Insert功能。
textBox1.Text = textBox1.Text.Remove(textBox1.SelectionStart, textBox1.SelectionLength).Insert(textBox1.SelectionStart, "A");

但是对于大字符串来说这可能不是很有效。 StringBuilder会更好。

答案 1 :(得分:3)

问题是由使用string.Replace函数引起的。

您想要完成的任务只需

即可完成
if (textBox1.SelectionLength > 0)
    textBox1.SelectedText = "A";

无需保存/设置选择开始。