2010-09-13 6 views
1

J'ai un texte très long et le mettre dans TextBox. Je veux afficher automatiquement le début du texte et non la fin. Mais TextBox affiche automatiquement la fin de mon texte.Comment afficher automatiquement le début du texte dans TextBox

Que puis-je faire pour y parvenir.

J'utilise la méthode SelectionStart pour placer le curseur au début du texte dans TextBox afin d'implémenter IntelliSense simple si la solution préférée n'utiliserait pas les méthodes qui déplacent le curseur.

Répondre

1

Je suppose que vous utilisez WinForms.


Mise à jour: étrange. Le code supprimé ci-dessous fonctionne comme décrit s'il est exécuté dans le constructeur de formulaire, mais pas plus tard dans le cycle de vie de formulaire (par exemple un gestionnaire de clic de bouton).

Notez que si vous avez déjà utilisé SelectionStart pour placer le curseur au début du texte (par exemple, via textBox.SelectionStart = 0;), tout ce qui doit suivre est textBox.ScrollToCaret();.


Tenir compte en utilisant la méthode textBox.AppendText(someLongString) lors de l'ajout du texte à votre zone de texte au lieu de textBox.Text = someLongString. Si vous devez effacer le texte actuel avant d'affecter le nouveau texte, utilisez textBox.Text = string.Empty; suivi d'un appel au textBox.AppendText();

+0

Il fonctionne comme TextBox.text – Darqer

+0

@Darqer - Effectivement. Fait intéressant, cela a fonctionné comme décrit à partir du constructeur de formulaire. J'ai mis à jour mon message avec une alternative. – kbrimington

2

Vous pouvez toujours définir une valeur plus petite dans la zone de texte, puis ajouter le reste du texte intégral à vos critères d'affichage du texte intégral.

Exemple:

textBox.text = someString.Substring(0, x); 

alors en cas de besoin faire

textBox.AppendText(someString.Substring(x+1)); 
1

Vous pouvez utiliser owner-draw pour remplacer le rendu de la zone de texte quand il n'a pas le focus d'entrée. Cela vous donnerait trivialement le contrôle complet de ce qu'il montre quand, sans casser la fonctionnalité d'édition réelle de la zone de texte en essayant de le pirater.

1

Vous pouvez envoyer un message de défilement Win32 à la poignée de zone de texte sous-jacent via P/Invoke:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); 

// From User32.dll 
private const int WM_VSCROLL = 277; 
private const int SB_TOP = 6; 

SendMessage(yourTextBox.Handle, WM_VSCROLL, (IntPtr)SB_TOP, IntPtr.Zero); 
Questions connexes