Нежелательный повторный запуск событий текстового поля - PullRequest
0 голосов
/ 24 мая 2010

Это один из тех «кажущихся очевидными», что и как делать, но натолкнулся на интересный побочный эффект при реализации. Я пытаюсь синхронизировать два текстовых поля при обновлении информации. В этом примере я буду использовать txtStartDate и txtEndDate. Если txtStartDate изменяется, то txtEndDate должен быть обновлен. Аналогично, если изменяется txtEndDate, я хочу обновить txtSartDate. Побочный эффект, с которым я сталкиваюсь, заключается в том, что, когда я настраиваю их для события TextChanged для обоих событий, кажется, что события запускаются друг против друга бесконечно (бесконечный цикл?). Я использую неправильное событие? Это задача для делегата?

Ответы [ 3 ]

1 голос
/ 24 мая 2010

Вам нужно дополнительное условие. В зависимости от вашей настройки это может быть «только изменить другое значение, когда у меня есть фокус».

Более общее решение (надеюсь, вы можете прочитать C #):

private bool changingTextBox1 = false;
void textBox1TextChanged(object sender, EventArgs e)
{
   if (! changingTextBox1)
   {
       changingTextBox1 = true;
       try
       {
           // do stuff
       }
       finally
       {
          changingTextBox1 = false;
       }
   }
}
0 голосов
/ 18 марта 2011
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
0 голосов
/ 24 мая 2010

Очень простой способ решения этой проблемы состоит в том, что вы создаете переменную-член UpdateInProgress boolean в Form и в начале каждого из обработчиков событий проверяете, является ли она true, и если это так, вы просто игнорируетесобытие, в противном случае установите его на true, а затем установите его на false в конце события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...