Estoy creando un editor de texto y script simple con código resaltado. Para eso uso un RichTextBox. Pero no sé cómo hacer que muestre los números de las líneas en el lado izquierdo, como en VS o Notepad ++. ¿Hay alguna solución?Cómo mostrar el número de una línea en un RichTextBox C#
Respuesta
Intenté volver a utilizar el código de los artículos CodeProject referenciados en cualquier lugar, pero todas las opciones miraba, parecía un poco demasiado kludgy.
Así que construí otro RichTextBoxEx que muestra los números de línea.
La numeración de línea se puede activar o desactivar. Es rápido. Se desplaza limpiamente. Puede seleccionar el color de los números, los colores de fondo de un degradado, el grosor del borde, la fuente, si usar ceros a la izquierda. Puede elegir numerar las líneas "tal como se muestran" o según las líneas rectas nuevas en el RTB.
Ejemplos:
alt text http://i39.tinypic.com/13zcoz6.jpg
alt text http://i43.tinypic.com/wml2z9.jpg
alt text http://i39.tinypic.com/25i4x3o.jpg
tiene limitaciones: muestra sólo números a la izquierda. Podrías cambiar eso sin demasiado esfuerzo si te importa.
El código está diseñado como proyecto de C#. Aunque es parte de una "solución" más grande (una herramienta de visualización XPath), el RichTextBox personalizado se empaqueta como un ensamblaje separable y está listo para usar en sus nuevos proyectos. En Visual Studio, simplemente agregue una referencia a la DLL, y puede arrastrar y soltar en su superficie de diseño. Puedes descartar el otro código de la solución más grande.
Puede lograrlo dibujando su propio control. Aquí hay un ejemplo de cómo dibujar usted mismo link
Me gustaría almacenar cada línea en una clase que tiene métodos para publicar en richtextbox. En ese método, puede anteponer el número de línea en función de su posición en la clase.
Por ejemplo (muy aproximadamente):
class myText
{
public List<string> Lines;
public string GetList()
{
StringBuilder sb = new StringBuilder();
int i = 0;
foreach (string s in Lines)
{
sb.AppendFormat("{0}: {1}", i, s).AppendLine();
i++;
}
return sb.ToString();
}
}
Scintilla.Net http://scintillanet.codeplex.com/ podría ser la solución más viable para sus necesidades. Pero para mi proyecto usé la solución sugerida por Cheeso (RichTextBoxEx del visualizador XPath). Es lo suficientemente simple y rápido para documentos no muy grandes. Todos los demás componentes .net de Internet fueron increíblemente lentos.
La forma más sencilla:
Dim myArray = RichTextBox1.Text.Split()
Dim cnt As Integer = 0
RichTextBox1.Clear()
Do While cnt < myArray.Count
RichTextBox1.AppendText(cnt & ":" & myArray(cnt) & vbNewLine)
cnt = cnt + 1
Loop
public int getWidth()
{
int w = 25;
// get total lines of richTextBox1
int line = richTextBox1.Lines.Length;
if (line <= 99)
{
w = 20 + (int)richTextBox1.Font.Size;
}
else if (line <= 999)
{
w = 30 + (int)richTextBox1.Font.Size;
}
else
{
w = 50 + (int)richTextBox1.Font.Size;
}
return w;
}
public void AddLineNumbers()
{
// create & set Point pt to (0,0)
Point pt = new Point(0, 0);
// get First Index & First Line from richTextBox1
int First_Index = richTextBox1.GetCharIndexFromPosition(pt);
int First_Line = richTextBox1.GetLineFromCharIndex(First_Index);
// set X & Y coordinates of Point pt to ClientRectangle Width & Height respectively
pt.X = ClientRectangle.Width;
pt.Y = ClientRectangle.Height;
// get Last Index & Last Line from richTextBox1
int Last_Index = richTextBox1.GetCharIndexFromPosition(pt);
int Last_Line = richTextBox1.GetLineFromCharIndex(Last_Index);
// set Center alignment to LineNumberTextBox
LineNumberTextBox.SelectionAlignment = HorizontalAlignment.Center;
// set LineNumberTextBox text to null & width to getWidth() function value
LineNumberTextBox.Text = "";
LineNumberTextBox.Width = getWidth();
// now add each line number to LineNumberTextBox upto last line
for (int i = First_Line; i <= Last_Line + 2; i++)
{
LineNumberTextBox.Text += i + 1 + "\n";
}
}
private void Form1_Load(object sender, EventArgs e)
{
LineNumberTextBox.Font = richTextBox1.Font;
richTextBox1.Select();
AddLineNumbers();
}
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
Point pt = richTextBox1.GetPositionFromCharIndex(richTextBox1.SelectionStart);
if (pt.X == 1)
{
AddLineNumbers();
}
}
private void richTextBox1_VScroll(object sender, EventArgs e)
{
LineNumberTextBox.Text = "";
AddLineNumbers();
LineNumberTextBox.Invalidate();
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (richTextBox1.Text == "")
{
AddLineNumbers();
}
}
private void richTextBox1_FontChanged(object sender, EventArgs e)
{
LineNumberTextBox.Font = richTextBox1.Font;
richTextBox1.Select();
AddLineNumbers();
}
private void LineNumberTextBox_MouseDown(object sender, MouseEventArgs e)
{
richTextBox1.Select();
LineNumberTextBox.DeselectAll();
}
private void Form1_Resize(object sender, EventArgs e)
{
AddLineNumbers();
}
- 1. Mostrar el número de línea en el manejo de excepciones
- 2. Mostrar número de línea en Borland C++ Builder 6 (2002)
- 3. Calcular desplazamiento para ScrollToVerticalOffset desde el número de línea en un WPF RichTextBox
- 4. mostrando el número de línea en el cuadro de texto enriquecido C#
- 5. Resalte línea actual de RichTextBox
- 6. Autoscrolling en RichTextBox C# WinForms
- 7. Cómo alinear texto en RichTextBox C#?
- 8. Cómo mostrar el número en una agrupación de 3 dígitos
- 9. ¿Cómo puedo hacer un desplazamiento de RichTextBox hasta el final cuando agrego una nueva línea?
- 10. Texto para colorear en RichtextBox, C#
- 11. Cómo mostrar el texto en una línea en wpf textblock
- 12. Mostrar Zend_Form_Element_Radio en una línea
- 13. Símbolo Celsius en RichTextBox
- 14. C# ¿Cómo puedo configurar el color del texto en richtextbox?
- 15. Cómo resaltar la sintaxis en un RichTextBox [C#]?
- 16. C# Impresión (RichTextBox)
- 17. .NET - Línea larga en RichTextBox Envuelto después de 3.510 caracteres
- 18. Mostrar la línea actual y el número de columna para un área de texto
- 19. C# - el cambio de color RichTextBox de ciertas palabras
- 20. C# RichTextBox problema de selección
- 21. Números de línea y columna actuales en un RichTextBox en una aplicación Winforms
- 22. ¿Cómo dibujar el borde alrededor de una palabra en RichTextBox?
- 23. Obtener marca para mostrar el número de línea en el error
- 24. ¿Cómo ocultar el símbolo de intercalación en un RichTextBox?
- 25. ¿Cómo no mostrar el número como exponente?
- 26. Número de línea actual de un System.Xml.XmlReader (C# & .Net)
- 27. ¿Es posible mostrar el número de línea en la salida de diff lado a lado?
- 28. C#/WPF: Deshabilitar ajuste del texto de RichTextBox
- 29. C# RichTextBox Seleccione especificada texto
- 30. ¿Cómo obtener el número de línea de un archivo en C++?
Comprobar a cabo este proyecto en el Proyecto de Código - http://www.codeproject.com/KB/edit/numberedtextbox.aspx –
tal vez debería tener el mismo control como Notepad ++. Esto es Scintilla.Net: http://scintillanet.codeplex.com/ – Oliver