【问题标题】:TextChanged event in VB.NETVB.NET 中的 TextChanged 事件
【发布时间】:2021-08-09 02:40:05
【问题描述】:

我有两个基本的文本框,比如说 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


    【解决方案1】:

    只要用户或以编程方式更改文本,就会发生TextChanged 事件。

    在您的情况下,您的 A_TextChanged 事件处理程序正在更改 B 的文本,以便调用 B_TextChanged ...

    添加一些Debug.WriteLine 语句可能会帮助您了解正在发生的事情:在您输入文本框时很难使用调试器进行单步调试。

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

    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
    

    【讨论】:

    • 哇,我没有深入了解事件链。这很尴尬,但这是机器背后逻辑的另一个例子。谢谢乔
    • 我喜欢我们发布几乎完全相同的答案的方式,甚至在解释方面!虽然你比我快 9 分钟。 +1 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多