2010-12-27 23 views
7

Tengo un RichTextBox en un programa WInForms que está ajustando cualquier línea de más de 3.510 caracteres. Tengo WordWrap configurado en falso, por lo que todas las líneas debajo de esa longitud se extienden normalmente sin envolver. Lo que solía hacer para evitar esto era configurar RightMargin a un número alto como 100,000, que aún funciona, pero ahora que estoy en Windows 7 y no en XP, obtengo una barra de desplazamiento que se desplaza como si el cuadro de texto tuviera líneas de esa gran longitud, cuando no es así..NET - Línea larga en RichTextBox Envuelto después de 3.510 caracteres

Para replicar, simplemente cree un programa de winforms con un RichTextBox y un botón. En el evento de clic en el botón, poner lo siguiente:

 StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < 3511; i++) 
      sb.Append('A'); 
     richTextBox1.Text = sb.ToString(); 

Después de ver el envoltorio, cambie el RightMargin del cuadro de texto a 100.000, y observe la barra de desplazamiento que aparece incluso antes de ejecutar el programa (sólo el 7 y probablemente Vista). La línea ya no se ajusta, pero quiero que la barra de desplazamiento solo actúe sobre el texto en el cuadro, y no sobre una longitud predeterminada.

+2

¿No hay una mejor manera de desollar a este gato y luego forzar al usuario a desplazarse tanto para ver los datos? –

+1

I repro. Parece intencional, * muy * costoso de arreglar. –

+0

@Hans Sí, lo hice tan bien como parece basado en el tamaño de la fuente ... puede obtener más/menos que 3510 dependiendo de las propiedades de la Fuente, frente a que sea un valor difícil. –

Respuesta

7

¿Podría establecer el margen derecho de richTextBox con el ancho de la cadena? Como este

richTextBox1.RightMargin = 
TextRenderer.MeasureText(sb.ToString(), this.richTextBox1.Font).Width; 
+0

Gracias! Esperaba más de solo un ajuste, pero puedo recorrer cada línea en el cuadro de texto, encontrar el más largo y simplemente establecerlo. –