web-dev-qa-db-fra.com

Faites défiler vers le bas de la zone de texte C #

J'ai un TextBox sur une application de formulaires C #. Je remplis le TextBox avec des informations sur l'événement Load du formulaire. J'appelle ensuite:

this.txtLogEntries.SelectionStart = txtLogEntries.Text.Length;
this.txtLogEntries.ScrollToCaret();

Cependant, la TextBox ne défile pas vers le bas?

Cela ne s'applique cependant qu'à l'événement Load. Je mets également à jour ce TextBox à partir d'autres parties de l'application une fois qu'il est en cours d'exécution, et dès que l'un de ces événements met à jour le TextBox, il défile vers le bas.

Alors, comment puis-je le faire défiler vers le bas lors du pré-remplissage du TextBox dans l'événement de chargement de formulaire?

60
SnAzBaZ

Essayez de mettre le code dans l'événement affiché du formulaire:

private void myForm_Shown(object sender, EventArgs e)
{
  txtLogEntries.SelectionStart = txtLogEntries.Text.Length;
  txtLogEntries.ScrollToCaret();
}
92
bernhof

Pendant que l'événement Load (se produit avant que le formulaire soit affiché) soit traité, il n'y a pas de formulaire à afficher encore, et donc aucun état visuel n'a été établi. Le fait de faire défiler un contrôle non visible ne fait donc probablement rien parce que - hé, il n'y a rien à faire défiler car une fenêtre de défilement est juste une vue sur le contrôle mais ne fait pas partie de son état.

Vous pouvez avoir plus de succès à déplacer la partie de défilement dans l'événement Shown (se produit après le formulaire est la première fois) du formulaire

16
Joey