2017-08-29 207 views
1

我有textbox,如果我輸入「狗」,我的應用程序應該用「可愛的狗」替換「狗」。但是當我嘗試並運行它時,會生成大量文本,因爲它在剛纔替換的「可愛的狗」中找到「狗」。這裏是代碼:用替換字符串中出現的相同單詞替換字符串

txtMain.Text = Microsoft.VisualBasic.Strings.Replace(txtMain.Text, "Dog", "Cute Dog", 1, -1, Constants.vbTextCompare) 
      txtMain.Select(txtMain.Text.Length, 0) 

這是在text changed事件觸發。

+0

看到這個https://stackoverflow.com/questions/27763110/changing-textbox-text-without-firing-textchanged-event – hatchet

回答

3

原因是,替換文本就像觸發TextChanged事件一樣,因爲那......好吧......改變了TextBox的文本。如果用戶在屏幕上更改任何內容,則不是僅限用戶界面的事件。

現在,那是什麼讓你的應用程序寫「可愛可愛的小狗」的話,並用一遍,再次觸發事件...

你可以引入一個成員變量_replacing這是隻要設置爲true替換髮生。完成後,將其重置爲false

現在你要做的唯一事情就是跳出你的代碼時的代碼替換:

If (_replacing) Then 
    Return 
End If 

_replacing = True 

txtMain.Text = Microsoft.VisualBasic.Strings.Replace(txtMain.Text, "Dog", "Cute Dog", 1, -1, Constants.vbTextCompare) 
     txtMain.Select(txtMain.Text.Length, 0) 

_replacing = False 

有了這個,用戶輸入仍然替換,但在更換了變化本身不會觸發事件再次發生。