我有一个textbox
如果我输入“Dog”,我的应用程序应该用“Cute Dog”替换“Dog”。但是当我尝试运行它时,会生成大量文本,因为它在“可爱的狗”中找到它刚刚替换的“狗”。这是代码:
txtMain.Text = Microsoft.VisualBasic.Strings.Replace(txtMain.Text, "Dog", "Cute Dog", 1, -1, Constants.vbTextCompare)
txtMain.Select(txtMain.Text.Length, 0)
这是在text changed
事件中触发的。
答案 0 :(得分:3)
原因是替换像这样的文本会再次触发TextChanged事件,因为......好吧......更改了TextBox的文本。如果用户在屏幕上更改了任何内容,则它不是仅限UI的事件。
现在这就是你的应用程序写的原因"可爱可爱的狗"然后,再次发射事件再次发生......
您可以引入一个成员变量_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
这样,用户输入仍然被替换,但替换本身的更改不会再次触发事件。