2017-08-29 26 views
1

私は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イベントでトリガーされています。

+0

を参照してください。https://stackoverflow.com/questions/27763110/changing-textbox-text-without-firing-textchanged-event – hatchet

答えて

3

その理由は、そのようなテキストを置き換えると、TextChangedイベントが再び発生するからです。なぜなら、それは...よく...テキストボックスのテキストを変更するからです。ユーザーが画面上で何かを変更した場合、UIのみのイベントではありません。

今、あなたのアプリケーションは、その後、「かわいいかわいい犬を」書く作るものthatsの、それが再びイベントを発生させ、そして再び...

であなたは限りtrueに設定されているメンバ変数_replacingを導入する可能性置き換えが行われます。完了したら、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 

、ユーザ入力がまだ交換されますが、交換自体からの変更がトリガされません再びイベント。