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