2010-12-20 25 views
5

Si quiero cambiar la posición de la barra de desplazamiento de un TextBox 's, ¿qué tengo que hacer además de esto:¿Cambiar la posición de la barra de desplazamiento en TextBox?

SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); 

Esta función sólo cambia la posición de la barra de desplazamiento, pero no actualiza el real TextBox (entonces la barra de desplazamiento "se desplaza", pero el texto no). ¿Alguna sugerencia? Estoy usando Windows Forms y .NET 4, con Visual Studio 2008.

Respuesta

4

En primer lugar, definir un valor constante:

const int EM_LINESCROLL = 0x00B6; 

A continuación, declarar dos métodos externos de user32.dll:

[DllImport("user32.dll")] 
static extern int SetScrollPos(IntPtr hWnd, int nBar, 
           int nPos, bool bRedraw); 
[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, int wMsg, 
           int wParam, int lParam); 

Por último, utilizar estos métodos para hacer la cosa real:

SetScrollPos(myTextBox.Handle,1,myTextBox.Lines.Length-1,true); 
SendMessage(myTextBox.Handle,EM_LINESCROLL,0, 
          myTextBox.Lines.Length-1); 

También puede utilizar GetScrollPos() para la posición de desplazamiento de ahorro cuando cuadro de texto se actualiza:

[DllImport("user32.dll")] 
static extern int GetScrollPos(IntPtr hWnd, int nBar); 
+0

¿Qué sucede si tengo 1 línea muy larga como la secuencia de bytes? – igal

7

que suelo hacer:

textBox1.Select(textBox1.Text.Length, 0); 
textBox1.ScrollToCaret(); 

Cuando la selección de 0 personajes sólo se mueve el cursor a la ubicación deseada (en el código de ejemplo: al final del texto).

1

todo lo posible para evitar el control de esto directamente, simplemente no funciona muy bien. Establezca la propiedad TextBox.SelectionStart para asegurarse de que la referencia es la línea que desea hacer visible. Luego llama a ScrollToCaret. El control debe tener el foco para hacer que esto funcione. Su usuario no tendrá ningún problema para recuperarlo.

cuadro de texto es un contenedor para el gran padre de los controles, es 23 años ya, más viejo que muchos de los usuarios de calculo. Cuando los 640 KB eran suficientes para todos y Windows 2.0 tenía que funcionar con un 386SUX o menos. La versión WPF tiene más silbatos.

Cuestiones relacionadas