2010-05-24 5 views
0

Ceci est l'un de ceux "semble évident" comme comment faire, mais est venu à travers l'effet secondaire intéressant dans l'implémentation. J'essaie de synchroniser deux zones de texte lorsque les informations sont mises à jour. Dans cet exemple, j'utiliserai txtStartDate et txtEndDate. Si le txtStartDate est modifié, le txtEndDate devrait être mis à jour. De même, si le txtEndDate change, je veux que le txtSartDate soit mis à jour. L'effet secondaire que je rencontre est que lorsque je les place sous l'événement TextChanged pour les deux, les événements semblent se redéclencher indéfiniment (boucle sans fin?). Est-ce que j'utilise le mauvais événement? Est-ce une tâche pour un délégué?Déclenchement indésirable des événements de zone de texte

Répondre

1

Vous avez besoin d'une condition supplémentaire. En fonction de votre configuration, cela pourrait être "changer uniquement d'autres valeurs quand j'ai le focus".

Une solution plus générale (je l'espère, vous pouvez lire C#):

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

Eh oui, bien sûr peut. Il fonctionne comme un charme. Repositionner la version de vb.net pour l'enregistrement. 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

Hmm. Il semble que les réponses ne gèrent pas les tags? –

+0

@hydroparadise: Vous pouvez publier ce code en tant que réponse séparée. Ensuite, utilisez le bouton 001001 pour formater le code. –

0

Une façon très simple de résoudre ce serait que vous créez une variable membre UpdateInProgress boolean dans le Form et au début de chacun des gestionnaires d'événements que vous vérifiez si elle est true et si oui vous ignorez l'événement, sinon réglé à true, puis définissez-le sur false à la fin de l'événement.

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 
Questions connexes