【问题标题】:Unwanted Retriggering of Textbox Events文本框事件的不需要的重新触发
【发布时间】:2010-05-24 12:25:18
【问题描述】:

这是其中一种“似乎很明显”的方法,但在实施过程中遇到了有趣的副作用。我试图在信息更新时使两个文本框保持同步。在本例中,我将使用 txtStartDate 和 txtEndDate。如果更改了 txtStartDate,则应该更新 txtEndDate。同样,如果 txtEndDate 更改,我希望更新 txtSartDate。我遇到的副作用是,当我在两者的 TextChanged 事件下设置它们时,这些事件似乎无限期地重新触发(无限循环?)。我使用了错误的事件吗?这是委托的任务吗?

【问题讨论】:

    标签: vb.net winforms forms textbox


    【解决方案1】:

    你需要一个额外的条件。根据您的设置,这可能是“只有在我有焦点时才更改其他值”。

    更通用的解决方案(希望你能看懂C#):

    private bool changingTextBox1 = false;
    void textBox1TextChanged(object sender, EventArgs e)
    {
       if (! changingTextBox1)
       {
           changingTextBox1 = true;
           try
           {
               // do stuff
           }
           finally
           {
              changingTextBox1 = false;
           }
       }
    }
    

    【讨论】:

    • 是的,当然可以。它就像一个魅力。转载vb.net版本以备不时之需。 Dim bUpdating As Boolean = False Private Sub txtStartDate_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtStartDate.TextChanged If Not bUpdating = True Then bUpdating = True Try 'do stuff Catch ex As Exception finally bUpdating = False End Try End If End Sub
    • 嗯。好像回复不处理标签?
    • @hydroparadise:您可以将该代码作为单独的答案发布。然后使用 001001 按钮格式化代码。
    【解决方案2】:

    解决它的一个非常基本的方法是在 Form 中创建一个 UpdateInProgress boolean 成员变量,并在每个事件处理程序的开头检查它是否为 true,如果是,则忽略事件,否则将其设置为true,然后在事件结束时将其设置为false

    【讨论】:

      【解决方案3】:
      Dim bUpdating As Boolean = False 
      Private Sub txtStartDate_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtStartDate.TextChanged
         If Not bUpdating = True Then 
            bUpdating = True 
            Try
               'do stuff 
            Catch ex As Exception 
            Finally bUpdating = False 
            End Try 
         End If 
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-04
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        • 2015-03-10
        • 1970-01-01
        相关资源
        最近更新 更多