Reputation: 637
I have already looked at similar questions here but it did not help.
I am using windows forms. I have button1 and textbox1.
I am trying to replace (or delete) the selected text in textBox1 and enter new letter (letter A) in place of it.
The code works well with random mixed numbers and letters for example:
385F1 select 8 and then result = 3A5F1 (8 replaced by A)
H74S31B select 4S and then the result is = H7A31B
KQ5689 select Q5689 and then the result is KA
So it works well, but when I select a number or a letter from a string which consists of same numbers or letters then it does not work, for example:
666777222333 select any 7 then the result = 666AAA222333 (not working)
9992244GG select any 9 then the result = AAA2244GG (not working)
QQQHHHUUU select any Q then the result = AAAHHHUUU (not working)
QQQHHHUUU select any QH then the result = QQAHHUUU(it works when different letters selected)
4433366 select 333 then the result = 44A66 (it works when all same numbers is selected)
Hope I explained it well. I don't know what causes this behavior. please help. Thank you
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;
}
}
}
Upvotes: 0
Views: 1891
Reputation: 205539
The problem is caused by the usage of string.Replace
function.
What you are trying to accomplish can be done simply by
if (textBox1.SelectionLength > 0)
textBox1.SelectedText = "A";
There is no need to save/set selection start.
Upvotes: 3
Reputation: 3796
Your problem is here :
textBox1.Text = textBox1.Text.Replace(textBox1.Text.Substring(textBox1.SelectionStart, textBox1.SelectionLength),"A");
The Substring function returns string. In your example (666777222333 select any 7 then the result = 666AAA222333 (not working)), it returns "7". But Text.Replace will replace all occurrences of 7. That is not what you want. What you can do is, instead of using string.Replace
function, use string.Remove
and string.Insert
textBox1.Text = textBox1.Text.Remove(textBox1.SelectionStart, textBox1.SelectionLength).Insert(textBox1.SelectionStart, "A");
But this might not be very efficient for large strings. A StringBuilder
would be better.
Upvotes: 4