Cómo agregar una línea a un cuadro de texto multilínea?
¿Cómo puedo añadir una línea de texto a un multilínea TextBox
?
Por ejemplo, pseudocódigo;
textBox1.Clear();
textBox1.Lines.Add("1000+");
textBox1.Lines.Add("750-999");
textBox1.Lines.Add("400-749");
...snip...
textBox1.Lines.Add("40-59");
O
textBox1.Lines.Append("brown");
textBox1.Lines.Append("brwn");
textBox1.Lines.Append("brn");
textBox1.Lines.Append("brow");
textBox1.Lines.Append("br");
textBox1.Lines.Append("brw");
textBox1.Lines.Append("brwm");
textBox1.Lines.Append("bron");
textBox1.Lines.Append("bwn");
textBox1.Lines.Append("brnw");
textBox1.Lines.Append("bren");
textBox1.Lines.Append("broe");
textBox1.Lines.Append("bewn");
Los únicos métodos que Cuadro de texto.Lines implementa (que puedo ver) son:
- Clon
- CopyTo
- Es igual a
- GetType
- GetHashCode
- GetEnumerator
- Inicializar
- GetLowerBound
- GetUpperBound
- getLength
- GetLongLength
- getValue
- setValue
- toString
10 answers
@Casperah señaló que estoy pensando mal en ello. A TextBox
no tiene líneas, tiene texto. Ese texto se puede dividir en líneas en el CRLF, si se solicita , pero no hay noción de líneas.
La pregunta entonces es cómo lograr lo que quiero, en lugar de lo que WinForms me permite.
Otras variantes dadas tienen un error sutil:
textBox1.AppendText("Hello" + Environment.NewLine);
textBox1.AppendText("Hello" + "\r\n");
textBox1.Text += "Hello\r\n"
textbox1.Text += System.Environment.NewLine + "brown";
O bien anexan o anteponga una nueva línea cuando (podría) no ser necesaria.
Entonces, ayudante de extensión:
public static class WinFormsExtensions
{
public static void AppendLine(this TextBox source, string value)
{
if (source.Text.Length==0)
source.Text = value;
else
source.AppendText("\r\n"+value);
}
}
Así que ahora:
textBox1.Clear();
textBox1.AppendLine("red");
textBox1.AppendLine("green");
textBox1.AppendLine("blue");
Y
textBox1.AppendLine(String.Format("Processing file {0}", filename));
Nota : Cualquier código es liberado al dominio público. No se requiere atribución.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 04:17:33
Yo iría con el System.Environment.NewLine
o un StringBuilder
Entonces podrías agregar líneas con un constructor de cadenas como este:
StringBuilder sb = new StringBuilder();
sb.AppendLine("brown");
sb.AppendLine("brwn");
textbox1.Text += sb.ToString();
O Nueva línea como esta:
textbox1.Text += System.Environment.NewLine + "brown";
Mejor:
StringBuilder sb = new StringBuilder(textbox1.Text);
sb.AppendLine("brown");
sb.AppendLine("brwn");
textbox1.Text = sb.ToString();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 01:33:49
Anexar un \r\n
a la cadena para poner el texto en una nueva línea.
textBox1.Text += ("brown\r\n");
textBox1.Text += ("brwn");
Esto producirá las dos entradas en líneas separadas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-20 16:21:22
Prueba esto
textBox1.Text += "SomeText\r\n"
También puedes probar
textBox1.Text += "SomeText" + Environment.NewLine;
Donde \r
es retorno de carro y \n
es nueva línea
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 16:22:43
Tienes que usar el método AppendText
del cuadro de texto directamente. Si intenta usar la propiedad Text
, el cuadro de texto no se desplazará hacia abajo a medida que se agreguen nuevas líneas.
textBox1.AppendText("Hello" + Environment.NewLine);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 16:27:31
La propiedad "Lines" de un cuadro de texto es una matriz de cadenas. Por definición, no puede agregar elementos a un string[]
existente, como puede hacerlo con un List<string>
. Simplemente no hay ningún método disponible para este propósito. En su lugar, debe crear un nuevo string[]
basado en la referencia de Líneas actual y asignarlo a Líneas.
Usando un poco de Linq (. NET 3.5 o posterior):
textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();
Este código está bien para agregar una línea nueva a la vez según la interacción del usuario, pero para inicializar un cuadro de texto con unos pocos docena de nuevas líneas, se llevará a cabo muy mal. Si está configurando el valor inicial de un cuadro de texto, establecería la propiedad Text directamente usando un StringBuilder (como han mencionado otras respuestas), o si está configurado para manipular la propiedad Lines, use una Lista para compilar la colección de valores y luego convertirla en una matriz para asignar a Lines:
var myLines = new List<string>();
myLines.Add("brown");
myLines.Add("brwn");
myLines.Add("brn");
myLines.Add("brow");
myLines.Add("br");
myLines.Add("brw");
...
textBox1.Lines = myLines.ToArray();
Incluso entonces, debido a que la matriz de líneas es una propiedad calculada, esto implica una gran cantidad de conversión innecesaria detrás de la escena.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 16:57:24
La adición de Environment.NewLine
o \r\n
no estaba funcionando para mí, inicialmente, con mi cuadro de texto. Descubrí que había olvidado entrar en las propiedades Behavior del cuadro de texto y establecer la propiedad "Multiline" en "True" para que agregue las líneas! Solo pensé en agregar esta advertencia ya que nadie más lo hizo en las respuestas anteriores, y pensé que la caja solo se expandiría automáticamente y olvidé que necesitaba establecer la propiedad Mulitline para que funcionara. Sé que es una especie de bonehead cosa (que es el tipo de cosa que nos pasa a última hora de un viernes por la tarde), pero podría ayudar a alguien a recordar para comprobar que. Además, en la sección de Apariencia está la propiedad " Barras de desplazamiento "que necesitaba establecer en" Both", para obtener barras horizontales y verticales para que el texto pueda desplazarse y verse en su totalidad. Así que la respuesta aquí no es solo un código añadiendo Environment.NewLine
o \r\n
al .Text
, sino también asegúrese de que su caja esté configurada correctamente con la derecha propiedad.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-20 21:29:49
Simplemente ponga un salto de línea en su texto.
No se agregan líneas como método. Multiline solo admite el uso de saltos de línea.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 16:20:42
Si sabe cuántas líneas desea, cree una matriz de cadena con tantos miembros (por ejemplo, myStringArray). A continuación, utilice myListBox.Lines = myStringArray;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-12 14:31:27
Los métodos anteriores no funcionaron para mí. Tengo la siguiente excepción:
Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll
Resulta que necesitaba llamar a Invoke
en mis controles primero. Ver respuesta aquí .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-26 16:52:39