【问题标题】:Replace string with same word in replacement string occurring在替换字符串中用相同的单词替换字符串
【发布时间】:2017-08-29 20:25:01
【问题描述】:

我有一个textbox,如果我输入“Dog”,我的应用程序应该将“Dog”替换为“Cute Dog”。但是当我尝试运行它时,会生成很多文本,因为它在刚刚替换的“可爱的狗”中找到了“狗”。这是代码:

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

这是在 text changed 事件上触发的。

【问题讨论】:

标签: .net string vb.net winforms


【解决方案1】:

原因是这样替换文本会再次触发 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

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

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 2014-01-08
    • 2015-07-03
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多