文本框事件的不需要的重新触发

时间:2010-05-24 12:25:18

标签: vb.net winforms forms textbox

这是“看似显而易见”的一种方法,但在实施过程中遇到了有趣的副作用。我正在尝试在更新信息时保持两个文本框同步。在这个例子中,我将使用txtStartDate和txtEndDate。如果更改了txtStartDate,则应该更新txtEndDate。同样,如果txtEndDate发生变化,我希望更新txtSartDate。我所遇到的副作用是,当我在TextChanged事件下为它们设置它们时,事件似乎无法相互重新触发(无限循环?)。我使用了错误的事件吗?这是代表的任务吗?

3 个答案:

答案 0 :(得分:1)

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

更通用的解决方案(我希望你能阅读C#):

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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