首页 > 解决方案 > VB.NET 中的 TextChanged 事件

问题描述

我有两个基本的文本框,比如说 A 和 B。我想输入一个文本框以清除另一个文本框的任何输入。例如,在 A 中键入 123。现在在 B 中键入 456。B 应包含 456,A 应为空。但是,我在 B 中收到 56,而 A 为空。似乎 B 的第一个输入用于触发 TextChanged 并且只存储剩余的输入。我怎样才能将第一个输入传递给文本框?

这是我的 VB.NET 代码:

Public Sub A_TextChanged(sender As Object, e As TextChangedEventArgs) Handles A.TextChanged
    B.Text = ""
End Sub

Public Sub B_TextChanged(sender As Object, e As TextChangedEventArgs) Handles B.TextChanged
    A.Text = ""
End Sub

标签: vb.net

解决方案


每当用户或以编程方式更改文本时,都会发生该TextChanged事件。

在您的情况下,您的事件处理A_TextChanged程序正在更改 B 的文本,因此B_TextChanged称为 ...</p>

添加一些Debug.WriteLine语句可能会帮助您了解正在发生的事情:当您在 TextBox 中键入内容时,很难使用调试器单步执行。

要解决此问题,请使用布尔标志,以便在从某个事件处理程序调用时不会修改另一个文本框。例如(即开即用且未经测试):

Private UpdatingTextBox As Boolean

Public Sub A_TextChanged(sender As Object, e As TextChangedEventArgs)     Handles A.TextChanged
    If Not UpdatingTextBox Then
        UpdatingTextBox = True
        B.Text = ""
        UpdatingTextBox = False
    End If
End Sub

Public Sub B_TextChanged(sender As Object, e As TextChangedEventArgs) Handles B.TextChanged
    If Not UpdatingTextBox Then
        UpdatingTextBox = True
        A.Text = ""
        UpdatingTextBox = False
    End If
End Sub

推荐阅读