2009-09-21 8 views
1

J'ai un RichTextBox que je veux reformater lorsque le contenu de la RichTextBox change. J'ai un gestionnaire d'événement TextChanged.WinForms RichTextBox: comment effectuer un formatage sur TextChanged?

Le reformatage (modification des couleurs des régions sélectionnées) déclenche l'événement TextChanged. Il en résulte une boucle sans fin d'événement TextChange, de reformatage, d'événement TextChange, de reformatage, etc.

Comment puis-je faire la distinction entre les modifications de texte résultant de l'application et les modifications de texte provenant de l'utilisateur?

Je pourrais vérifier la longueur du texte, mais je ne suis pas sûr que ce soit juste.

Répondre

3

Vous pouvez avoir un drapeau bool indiquant si vous êtes déjà dans le traitement TextChanged:

private bool _isUpdating = false; 
private void Control_TextChanged(object sender, EventArgs e) 
{ 
    if (_isUpdating) 
    { 
     return; 
    } 

    try 
    { 
     _isUpdating = true; 
     // do your updates 
    } 
    finally 
    { 
     _isUpdating = false; 
    } 
} 

De cette façon, vous arrêtez les TextChanged supplémentaires des événements de la création d'une boucle.

+0

Cela est bon, mais gardez à l'esprit que _isupdating doit être utilisé partout où l'application modifie le texte de la zone de texte enrichi, et pas seulement dans le gestionnaire. – xpda