Ir a Una Línea Richtextbox

08/05/2006 - 16:54 por Ivan Pequeño | Informe spam
Estimados Foristas

Estando en Vb.net 2002

Mi RichTextBox se llena desde un archivo, con 200 líneas.
Hasta aqui cero problema.

Pero yo efectuo una verificación del texto
(es una verificación de sintaxis de código Cobol)

Tengo 15 lineas visibles y detecto un error en la
linea 30.

Me pasé hartas horas del week-end, intentando hacer que la línea
que contiene el error aparezca al centro del RichTextBox sin poder
Lograrlo.
No sé si me leí TODA LA DOCUMENTACION, pero creo que no anduve lejos

¿Alguien tiene una idéa?

Agradeciendo de antemano
 

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
10/05/2006 - 17:07 | Informe spam
"Ivan Pequeño" escribió en el mensaje
news:
Pero yo efectuo una verificación del texto
(es una verificación de sintaxis de código Cobol)

Tengo 15 lineas visibles y detecto un error en la
linea 30.

Me pasé hartas horas del week-end, intentando hacer que la línea
que contiene el error aparezca al centro del RichTextBox sin poder
Lograrlo.
No sé si me leí TODA LA DOCUMENTACION, pero creo que no anduve lejos

¿Alguien tiene una idéa?



Hola, Ivan:

Tengo instalado VS 2003, de manera que no se si te sirva para la version
anterior.

Tanto en esta version de VB.NET como en VB6 se produce automaticamente un
scroll para hacer el texto visible cuando le asignas a la propiedad SelStart
un valor que cae fuera del rango visible y el control tiene el foco.

El metodo GetLineFromCharIndex debe ayudarte a ubicar la linea en cuestion.

GetCharIndexFromPosition(New Point(0, 0)) te devuelve el indice del primer
caracter visible arriba a la izquierda.

GetLineFromCharIndex(GetCharIndexFromPosition(New Point(0, 0))) te devuelve
el indice de la primera linea visible.

De ahi en adelante es tan sencillo como ubicar un caracter en la linea
"ofensiva" (si el texto es muy largo puedes hacer una busqueda binaria hasta
encontrar un caracter para el que GetLineFromCharIndex te devuelva el numero
de la linea deseada). Digamos que este caracter se almacena en una variable
<Pos>. Luego puedes usar GetCharIndexFromPosition para determinar si el
texto esta por encima [Pos < GetCharIndexFromPosition(New Point(0, 0))] o
por debajo [Pos > GetCharIndexFromPosition(New Point(RTB.Width,
RTB.Height))].

El metodo ScrollToCaret te garantiza que si el cursor esta antes de la
primera linea visible, la linea que lo contiene sera la primera, y si esta
por debajo de la ultima, la linea que lo contiene será la ultima. Puedes
usarlo para asegurarte de que la linea que quieres resaltar quede en el
centro exacto del control

Claro que todo depende de que VB2002 se comporte de la manera descrita.

Salud!

Preguntas similares