用替换字符串中的相同单词替换字符串

时间:2017-08-29 20:25:02

标签: .net string vb.net winforms

我有一个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事件中触发的。

1 个答案:

答案 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

这样,用户输入仍然被替换,但替换本身的更改不会再次触发事件。