Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框文本“;替换“;功能不正常_C#_String_Replace - Fatal编程技术网

C# 文本框文本“;替换“;功能不正常

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,然后

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

我正在使用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 数字(已选定)

希望我能解释清楚。我不知道是什么导致了这种行为。请帮忙。多谢各位

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所说:你的论点没有任何价值。