2015-11-14 31 views
0

我已經在這裏看過類似的問題,但它沒有幫助。TextBox文本「替換」功能不能正常工作

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

我試圖替換(或刪除)textBox1中的選定文本,並輸入新的字母(字母A)代替它。

代碼工作很好地隨機混合數字和字母 例如:

385F1選擇8,然後導致= 3A5F1(8由A取代)

H74S31B選擇4S,然後將結果是= H7A31B

KQ5689選擇Q5689,然後將結果是KA

所以它工作得很好,但是當我選擇一個號碼或從它由相同的數字或字母的字符串信那麼它不工作,例如:

666777222333選擇任何7,則結果= 666AAA222333(未 工作)

9992244GG選擇任何9那麼結果= AAA2244GG(不工作)

QQQHHHUUU選擇任何●然後結果= 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; 
     } 
    } 
} 
+0

'String.Replace'替換*所有*實例,而不僅僅是一個。爲什麼不使用'String.Substring'刪除選定的字符?此外,你也許可以讓谷歌搜索這個問題... –

+0

@LukePark,同樣的事情可以說大概90%的SO問題。按照這個速度,並遵循你的邏輯,他們可能會關閉網站。 –

+0

@LucMorin除了他們不會關閉網站。堆棧溢出是針對**還沒有答案**的問題。這個問題100%肯定,已經有了答案。隨着新框架的發佈,標準發生了變化,將會出現沒有答案的問題。 –

回答

3

你的問題是在這裏:

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

子字符串函數返回字符串。在你的例子中(666777222333選擇任何7然後結果= 666AAA222333(不工作)),它返回「7」。但是Text.Replace會替換所有出現的7.這不是你想要的。你可以做的是,而不是使用string.Replace功能,使用string.Removestring.Insert

textBox1.Text = textBox1.Text.Remove(textBox1.SelectionStart, textBox1.SelectionLength).Insert(textBox1.SelectionStart, "A"); 

但這可能不是大串非常有效的。 A StringBuilder會更好。

+0

它運作良好。謝謝 – naouf

3

該問題是由string.Replace函數的使用引起的。

你正在嘗試完成只需

if (textBox1.SelectionLength > 0) 
    textBox1.SelectedText = "A"; 

做沒有必要保存/集選擇的開始。

+0

你也工作過,謝謝 – naouf

+0

這應該是被接受的答案。 –