.net 用替换字符串中的相同单词替换字符串
我有一个.net 用替换字符串中的相同单词替换字符串,.net,string,vb.net,winforms,.net,String,Vb.net,Winforms,我有一个文本框,如果我输入“Dog”,我的应用程序应该用“可爱的狗”替换“Dog”。但当我试着运行它时,会生成大量的文本,因为它在“可爱的狗”中找到了“狗”,而它刚刚替换了。代码如下: txtMain.Text = Microsoft.VisualBasic.Strings.Replace(txtMain.Text, "Dog", "Cute Dog", 1, -1, Constants.vbTextCompare) txtMain.Select(txtMain.Text
文本框
,如果我输入“Dog”,我的应用程序应该用“可爱的狗”替换“Dog”。但当我试着运行它时,会生成大量的文本,因为它在“可爱的狗”中找到了“狗”,而它刚刚替换了。代码如下:
txtMain.Text = Microsoft.VisualBasic.Strings.Replace(txtMain.Text, "Dog", "Cute Dog", 1, -1, Constants.vbTextCompare)
txtMain.Select(txtMain.Text.Length, 0)
这是在
文本更改事件上触发的。原因是这样替换文本会再次触发TextChanged事件,因为。。。好。。。更改文本框的文本。如果用户更改屏幕上的任何内容,这不是唯一的UI事件
现在这就是为什么你的应用程序会写“可爱的小狗”的原因,然后它会一次又一次地触发事件
您可以引入一个成员变量\u replacement
,只要替换发生,该变量就被设置为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
这样,用户输入仍会被替换,但替换本身的更改不会再次触发事件。请参见此