it-swarm-pt.tech

Como adicionar uma linha a um TextBox multilinhas?

Como posso adicionar uma linha de texto a multi-linhaTextBox ?

por exemplo. pseudo-código;

textBox1.Clear();
textBox1.Lines.Add("1000+");
textBox1.Lines.Add("750-999");
textBox1.Lines.Add("400-749");
...snip...
textBox1.Lines.Add("40-59");

ou

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");

Os únicos métodos que TextBox.Lines implementes (que eu posso ver) são:

  • Clone
  • Copiar para
  • É igual a
  • GetType
  • GetHashCode
  • GetEnumerator
  • Inicializar
  • GetLowerBound
  • GetUpperBound
  • GetLength
  • GetLongLength
  • Obter valor
  • SetValue
  • Para sequenciar

enter image description here

49
Ian Boyd

@Casperah apontou que estou pensando errado. Um TextBox não tem linhas, ele tem text . Esse texto pode ser dividido no CRLF em linhas, se solicitado - mas não há noção de linhas.

A questão então é como realizar o que eu quero, ao invés do que o WinForms me permite. 

Outras variantes dadas têm um bug sutil:

  • textBox1.AppendText("Hello" + Environment.NewLine);
  • textBox1.AppendText("Hello" + "\r\n");
  • textBox1.Text += "Hello\r\n"
  • textbox1.Text += System.Environment.NewLine + "brown";

Eles acrescentam ou prefixam uma nova linha quando um (talvez) não seja necessário.

Então, ajudante de extensão:

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);
   }
}

Então agora:

textBox1.Clear();
textBox1.AppendLine("red");
textBox1.AppendLine("green");
textBox1.AppendLine("blue");

e

textBox1.AppendLine(String.Format("Processing file {0}", filename));

Nota : Qualquer código é liberado para o domínio público. Nenhuma atribuição é necessária.

96
Ian Boyd

Eu iria com o System.Environment.NewLine ou uma StringBuilder

Então você poderia adicionar linhas com um construtor de string como este: 

StringBuilder sb = new StringBuilder();
sb.AppendLine("brown");
sb.AppendLine("brwn");

textbox1.Text += sb.ToString();

ou NewLine assim:

textbox1.Text += System.Environment.NewLine + "brown";

Melhor:

StringBuilder sb = new StringBuilder(textbox1.Text);
sb.AppendLine("brown");
sb.AppendLine("brwn");

textbox1.Text = sb.ToString();
19
Matt

Acrescente um \r\n à string para colocar o texto em uma nova linha.

textBox1.Text += ("brown\r\n");
textBox1.Text += ("brwn");

Isso produzirá as duas entradas em linhas separadas.

14
DJ Quimby

Tente isso

textBox1.Text += "SomeText\r\n" 

você também pode tentar 

textBox1.Text += "SomeText" + Environment.NewLine;

Onde \r é retorno de carro e \n é nova linha

5
Vamsi

Você tem que usar o método AppendText da caixa de texto diretamente. Se você tentar usar a propriedade Text, a caixa de texto não rolará para baixo quando a nova linha for anexada.

textBox1.AppendText("Hello" + Environment.NewLine);
3
Pierre-Alain Vigeant

A propriedade "Lines" de um TextBox é uma matriz de seqüências de caracteres. Por definição, você não pode adicionar elementos a um string[] existente, como em um List<string>. Simplesmente não existe um método disponível para o propósito. Em vez disso, você deve criar um novo string[] com base na referência de linhas atual e atribuí-lo às linhas. 

Usando um pequeno Linq (.NET 3.5 ou posterior):

textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();

Esse código é bom para adicionar uma nova linha de cada vez com base na interação do usuário, mas para inicializar uma caixa de texto com algumas dezenas de novas linhas, ela terá um desempenho muito ruim. Se você estiver definindo o valor inicial de um TextBox, eu definiria a propriedade Text diretamente usando um StringBuilder (como outras respostas já mencionaram), ou se você estiver configurado para manipular a propriedade Lines, use uma List para compilar a coleção. de valores e, em seguida, convertê-lo em uma matriz para atribuir a linhas:

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();

Mesmo assim, como o array Lines é uma propriedade calculada, isso envolve muita conversão desnecessária nos bastidores.

3
KeithS

A adição de Environment.NewLine ou \r\n não estava funcionando para mim, inicialmente, com minha caixa de texto. Descobri que tinha esquecido de ir para as propriedades Behavior da caixa de texto e definir a propriedade " Multiline " para " True " para adicionar as linhas! Eu apenas pensei em adicionar esta advertência, uma vez que ninguém mais fez nas respostas acima, e eu pensei que a caixa iria se expandir automaticamente e esqueci que eu precisava definir a propriedade Mulitline para que ela funcionasse. Eu sei que é uma espécie de bobagem (que é o tipo de coisa que nos acontece no final da tarde de sexta-feira), mas pode ajudar alguém a lembrar de verificar isso. Além disso, na seção Appearance está a propriedade "ScrollBars" que eu precisava definir para "Both", para obter barras horizontais e verticais para que o texto pudesse ser realmente rolado e visto em sua totalidade. Portanto, a resposta aqui não é apenas um código acrescentando Environment.NewLine ou \r\n ao .Text, mas também verifique se a caixa está configurada corretamente com as propriedades corretas.

1
vapcguy

Basta colocar uma quebra de linha no seu texto.

Você não adiciona linhas como um método. Multiline apenas suporta o uso de quebras de linha.

0
nycdan

Os métodos acima não funcionaram para mim. Eu tenho a seguinte exceção:

Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll

Acontece que eu precisava chamar Invoke em meus controles primeiro. Veja a resposta aqui .

0
Roald

Se você souber quantas linhas deseja, crie uma matriz de String com tantos membros (por exemplo, myStringArray). Em seguida, use myListBox.Lines = myStringArray;

0
Kay Superstar