C# - Gerenciando o texto de um controle TextBox Multiline

  Hoje veremos como gerenciar o texto de um controle TextBox cuja propriedade Multiline foi definida como True. Veremos como acessar o texto linha por linha, incluir texto e usar outros recursos da classe TextBox. 

Em aplicações Windows Forms o controle TextBox é um dos controles mais usados para exibir texto e permitir a entrada do usuário. Nada mais importante então do que conhecer bem seus recursos mais importantes.

Recursos usados

Objetivos

Aprendizado

Conceitos básicos

Na linguagem C# o controle TextBox é na verdade uma classe com propriedades e métodos que implementa muitas funcionalidades que antes exigiriam código extra.

A primeira coisa que você deve ter em mente é que como o TextBox é uma classe temos que criar uma instância da classe para acessar seus métodos e propriedades, assim podemos fazer:

TextBox txt = new TextBox();

Aqui txt é um objeto instanciado da classe TextBox(). 

A seguir a relação das principais propriedades/métodos da classe TextBox :

1- txt.Text = "macoratti.net";

2- txt.AcceptsReturn = true;

3- txt.AcceptsTab = true;

4- txt.Clear();

5- txt.ScrollBars = ScrollBars.Both;

6- txt.Select(0, 4);

7- txt.SelectAll();

8- txt.Size = new Size(300, 500);

9- txt.Undo();

10- txt.TextAlign = HorizontalAlignment.Center;

11- txt.WordWrap = true;

12- txt.Cursor = Cursors.Arrow;

13- txt.MaxLength = 10;

14- string texto = txt.SelectedText;

15- txt.CharacterCasing = CharacterCasing.Lower;

16- txt.AllowDrop = true;

17- txt.AppendText(System.Environment.NewLine + " macoratti");
18- txt.Multiline = true;

1- Atribui um texto ao controle.
2- Permite o Return com criação de uma nova linha no componente
3- Permite a inclusão de TAB no controle
4- Limpa o texto no controle
5- Inclui barras verticais e horizontais no controle. Podemos ter os valores : Horinzontal, Vertical , None.
6- Seleciona o texto do inicio até o quarto caractere
7- Seleciona todo o texto no controle
8- Define um novo tamanho para o controle
9- Desfaz a última operação de edição no controle
10- Faz o alinhamento de texto no controle. Podemos ter os valores: Left e Rigth
11- Permite a quebra de texto no controle.
12- Define o ícone do mouse quando o mesmo for movido sobre o controle. Alguns valores possíveis : Cross, Hand , Help , No , etc.
13- Define o tamanho máximo de caracteres que o controle irá suportar.
14- Atribui a variável texto o texto selecionado no controle
15- Define que os caracteres informados no controle serão caixa baixa. Podemos ter os valores :  CharacterCasing.Upper e CharacterCasing.Normal
16- Indica se o controle irá poder suportar a operação de drag do usuário.
17- Inclui o texto 'macoratti' no controle.
18- Permite ao controle receber múltiplas linhas de texto

Preenchendo um controle TextBox Multiline e acessando o Texto linha a linha

Agora veremos como preencher um controle TextBox cuja propriedade Multiline foi definida como true com conteúdo de um arquivo texto.

Iremos acessar o arquivo texto, ler o seu conteúdo e exibir o texto no controle TextBox.

Vamos mostrar também como podemos acessar o texto no controle TextBox linha por linha.

Abra o Visual Studio 2013 Express for windows desktop e clique em New Project;

Selecione a linguagem C# e o template Windows Forms Application informando o nome TextBox_Multiline e clique no botão OK;

No formulário form1.cs inclua os seguintes controles:

No evento Click do botão de comando Carregar Texto vamos ler o arquivo texto Roteiro.txt localizado na pasta c:\dados e exibir o seu conteúdo no controle TextBox - txtTexto. Segue o código:

 private void btnCarregarTexto_Click(object sender, EventArgs e)
{
            if (!string.IsNullOrWhiteSpace(txtArquivo.Text))
            {
                LerArquivoTexto(txtArquivo.Text);
            }
            else
            {
                MessageBox.Show("Informe o caminho e nome do arquivo texto.");
            }
}

A rotina LerArquivoTexto() recebe o nome do arquivo texto informado pelo usuário na caixa de texto txtArquivo tem o seguinte código:

private void LerArquivoTexto(string StrArquivo)
 {
            try
            {
                //Cria uma instância do StreamReader para ler o arquivo
                //A declaração using fecha o stream no fim do escopo
                using (StreamReader sr = new StreamReader(StrArquivo))
                {
                    String linha = sr.ReadToEnd();
                    txtTexto.Text = linha;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Não é possivel ler o arquivo : " + e.Message);
            }
 }

O código cria um StreamReader e usa o método ReadToEnd() para ler o arquivo texto e atribuir o valor lido à caixa de texto.

Agora no evento Click do botão de comando Ler TextBox temos o código que lê o conteúdo da caixa de texto linha por linha, incluindo cada linha lida em um controle ListBox (lbTexto):

  private void btnLerTextBox_Click(object sender, EventArgs e)
  {
            if (!string.IsNullOrWhiteSpace(txtTexto.Text))
            {
                this.Width = 1071;
                this.Height = 387;
                string[] str = txtTexto.Text.Split('\r');
                for (int i = 0; i < str.Length; i++)
                {
                    str[i] = str[i].Replace("\n", "");
                    lbTexto.Items.Add(str[i]);
                }
            }
  }

O código utiliza a função Split para retornar um array contendo o número de substrings separadas pelo delimitador \r que representa o carriage return ou fim de linha. Assim teremos um array contendo cada linha do arquivo texto como podemos ver na figura ao lado obtida no debug via intellisense.(As linhas em branco são representadas por \n)

Nota: a função Split retorna um array de única dimensão contendo o número de substrings separadas no processo dependendo do critério e delimitador usado.

string[] str = txtTexto.Text.Split('\r');

Para exibir cada linha no listbox usamos um laço for/next onde substituímos o caractere \n por um espaço em branco.

str[i] = str[i].Replace("\n", "");

Dessa forma temos acesso a cada linha do texto pelo índice do array e podemos fazer o que quisermos com as linhas.

Abaixo vemos o resultado da execução do projeto com a leitura do arquivo texto e o acesso do conteúdo do TextBox e exibição no ListBox:

Podemos inserir texto em um determinada posição do conteúdo do controle TextBox usando a propriedade SelectionStart que obtém ou define um índice de caractere para o início da seleção atual do método Insert da classe String que retorna uma nova string na qual o texto foi inserido na posição do índice especificado:

  private void button1_Click(object sender, EventArgs e)
  {
            int posicaDoCursor = txtTexto.SelectionStart;
            txtTexto.Text = txtTexto.Text.Insert(posicaDoCursor, " TEXTO INSERIDO ");
 }

O código obtém a posição atual do cursor no texto e inclui o texto a partir dessa posição :

Copiando o conteúdo de uma TextBox em outra

Vejamos agora como podemos copiar o conteúdo de uma caixa de texto em outra.

Para fazer isso podemos usar o método AppendText da classe TextBox anexa o texto ao texto atual de uma caixa de texto.

Inclua um novo projeto na solução no menu File-> Add New -> Project com o  nome TextBox_Append;

Defina no formulário form1.cs dois controles TextBox : TextBox1 e TextBox e um controle Button (btnCopiar) conforme o leiaute abaixo:

A seguir no evento Click do botão de comando inclua o seguinte código:

  private void btnCopiar_Click(object sender, EventArgs e)
  {
      CopiarTexto(textBox1,textBox2);
  }

A rotina CopiarTexto() recebe dois parâmetros: o TextBox de origem e o TextBox de destino. O código desta rotina segue abaixo:

 private void CopiarTexto(TextBox t1,TextBox t2)
  {
       // Verifique se o texto foi selecionado no textbox1
       if (t1.SelectionLength == 0)
            // Se nao tem seleção retorna
            return;
         // Determina se o texto a ser apendado no textBox2 excede a propriedade MaxLength definida
        if ((t1.SelectedText.Length + t2.TextLength) > t2.MaxLength)
             MessageBox.Show("O texto a ser colado é muito maior que o número máximo de caracteres permitido.")
         else
             // Anexa o texto do textBox1 no textBox2.
             textBox2.AppendText(textBox1.SelectedText);
  }

Executando o projeto iremos obter:

Pegue o projeto completo aqui : TextBox_Multiline.zip

Tito 3:8 Fiel é esta palavra, e quero que a proclames com firmeza para que os que creem em Deus procurem aplicar-se às boas obras. Essas coisas são boas e proveitosas aos homens.

Tito 3:9 Mas evita questões tolas, genealogias, contendas e debates acerca da lei; porque são coisas inúteis e vãs.


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti