Back-End

14 ago, 2015

Editor de texto com RichTextBox e PrintDocument – Parte 01

Publicidade

No artigo de hoje vou mostrar como podemos criar um pequeno editor de textos usando os recursos do controle RichTextBox na linguagem C#. Veremos também como imprimir e visualizar a impressão do texto usando o PrintDocument.

Eu já tratei dos controles RichTextBox e PrintDocument em outros artigos, mas neste eu vou usar esses controles em um mesmo projeto usando a linguagem C#. Dessa forma, eu não vou entrar em detalhes das propriedades deste controles, visto que eu já abordei isso em artigos anteriores. Vou apenas dar um pequeno resumo de cada um a título de recordação.

RichTextBox

O componente RichTextBox é similar com o controle TextBox, mas fornece características mais avançadas que podemos explorar. Dentre elas temos a formatação de texto, cores e fontes. Da mesma forma que o controle TextBox, o controle RichTextBox é baseado na classe TextBoxBase a qual é baseada na classe Control.

Ao acessar textos no controle RichTextBox temos duas opções:

  1. text – Trata o texto no formato normal
  2. rtf – Trata o texto no formato Rich Text Format

Além disto, o controle RichTextBox fornece métodos para abrir e salvar arquivos e procurar strings:

  • LoadFile – permite carregar um arquivo .RTF existente ou um arquivo Texto no controle. Você pode também carregar dados de um stream de dados já aberto.
  • SaveFile – permite salvar para RTF ou ASCII texto. Você também pode salvar para um stream de dados aberto.
  • Find –  permite localizar strings específicas no texto do controle.

Você também pode inicializar o controle para dados armazenados em memória.  Se o texto no interior do controle contiver links para sites web, você pode usar a propriedade DetectUrls para exibir o link apropriadamente no texto; pode também tratar o evento LinkClicked para realizar tarefas associada com o link.

A propriedade SelectionProtected permite proteger o texto no controle de manipulações por parte do usuário.

Com o texto protegid, você pode gerenciar o evento Protected para determinar quando o usuário tentou modificar o texto ou alertar o usuário que o texto esta protegido.

PrintDocument

Para fornecer as funcionalidades básicas para imprimir em aplicações Windows Forms devemos estar familiarizados com a classe Graphics do namespaceSystem.Drawing. Para imprimir, usamos o namespace System.Drawing.Printing, onde a classe principal é a classe PrintDocument, que representa um objeto que envia a saída para a impressora.

Para imprimir um texto ou um gráfico, chamamos o método Print da classe PrintDocument e um dos eventos que o método Print invoca é o evento PrintPage. Você precisa vincular um manipulador de evento a este evento e escrever o código para enviar a saída para a impressora.

O manipulador de eventos irá receber um argumento do tipo PrintPageEventArgs contendo os dados relacionados ao evento PrintPage e uma das propriedades deste argumento é a propriedade Graphics, a partir da qual você pode obter um objeto Graphics.

Este objeto Graphics representa uma página a ser impressa e para enviar uma string para a impressora, por exemplo, você pode usar o método DrawString da classeGraphics. Você pode chamar outros método desta classe como FillRectangle, DrawEllipse etc.

Vamos reunir os recursos destes componentes e outros recursos dos controles Windows Forms e criar um pequeno editor de textos.

Recursos usados: Visual Studio Community 2013.

Criando o editor de textos

Abra o VS Community 2013 e clique em New Project. Selecione a linguagem C# e o template Windows Forms Application e informe o nome RichTextBox_Imprimir.

c_rctbp11

No formulário form1.cs vamos incluir os seguintes controles:

  • MenuStrip – menuStrip1

  • ToolStrip – toolStrip1

  • RichTextBox – rtxtb1

  • OpenFileDialog – ofd1

  • SaveFileDialog – svdlg1

  • PrintDialog – prntdlg1

  • PrintDocument – prntdoc1

  • PrintPreviewDialog – prntprvdlg1

  • FontDialog – fontdlg1

Disponha os controles conforme o leiaute da figura abaixo:

c_rctbp12

Para criar as opções do menu no controle MenuStrip, apenas digite diretamente no controle o texto das opções usando o caractere & na frente de uma letra que queira sublinhar. Ex: &Arquivo.

As opções que iremos definir são:

c_rctbp15

Para incluir os ícones no controle ToolStrip, selecione o controle e na janela de propriedades clique em Items(Collection).

Será aberta a janela Items Collection Editor onde a primeira coisa a fazer é incluir um item no menu. Para isso, selecione o tipo do item (Button) e clique no botãoAdd.

c_rctbp13

A seguir, defina as propriedades definindo uma imagem pré-selecionada na propriedade Image e, a seguir, defina as propriedades Text informando o texto que irá aparecer quando o mouse repousar sobre o controle e a propriedade Name para definir o nome do controle.

Dessa forma, iremos definir os seguintes itens no ToolStrip:

  • Novo
  • Abrir
  • Salvar
  • Copiar
  • Colar
  • Negrito
  • Itálico
  • Sublinhado
  • Alterar Fonte
  • Visualizar Impressão
  • Imprimir
  • Ajuda
  • Sair

c_rctbp14

Observe que a maioria das opções de texto do controle MenuStrip estão replicadas nos ícones do controle ToolStrip e assim o usuário poderá acessar cada opção ou clicando no menu com o texto ou clicando no respectivo ícone. Teremos assim dois caminhos para acessar a mesma funcionalidade.

Os namespaces usados no formulário form1.cs são:

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

A seguir, após a declaração do formulário, vamos incluir uma declaração para a variável leitor, que será usada no projeto para ler o arquivo texto:

StreamReader leitor = null;

Definindo o código de cada funcionalidade do editor de texto

Vamos agora definir o código para cada uma das opções do menu do editor de textos. Vamos fazer da seguinte forma:

  • Fazemos a chamada no evento Click do menu (texto)

  • Fazemos a mesma chamada do evento Click do ícone (imagem)

  • Definimos o código da funcionalidade

Código Evento do MenuStrip (Texto) Código do Evento do ToolStrip (Ícone)
Código da funcionalidade

Nota: Poderíamos chamar via código o evento Click de outro controle. Assim, para o evento Click do item Copiar do menu temos o evento mnuCopiar_Click. Para acionar este evento Click a partir de outro controle, usamos o método PerformClick:

private void toolStripCopiar_Click(object sender, EventArgs e)
{
    //Copiar();
     mnuCopiar.PerformClick();
}

Novo

A opção Novo permite criar um novo arquivo. Para isso, antes chamamos o método ChamaSalvarArquivo(), que pergunta ao usuário se ele deseja salvar o arquivo atual.

Em caso positivo, o método Salvar_Arquivo() será chamado. Esse método acionará a janela de diálogo Salvar Arquivo (SaveFileDialog) para que o usuário escolha o local e nome do arquivo a salvar.

Após isso usamos os métodos Clear() e Focus() do RichTextBox para limpar o conteúdo do controle e colocar o foco no mesmo.

macoratti09

Abrir

A opção Abrir permite abrir um arquivo texto. Para isso será aberta a janela de diálogo Abrir Arquivo (OpenFileDialog) para o usuário selecionar o arquivo a ser aberto.

macoratti08

Salvar

macoratti07

Copiar

A opção Copiar usa o método Copy do controle RichTextBox para copiar um texto selecionado.

Aqui estamos usando o método PerformClick() na opção Copiar do ToolStrip para chamar o evento Click do item menuCopiar do MenuStrip.

macoratti06

Colar

A opção Colar usa o método Paste do controle RichTextBox para colar um texto selecionado em uma posição do texto atual.

macoratti05

Negrito

A opção Negrito permite negritar o texto selecionado. Para isso, usamos a propriedade SelecionFont, que obtém ou define a fonte de seleção ou de ponto de inserção de texto atual e definimos o estilo como Bold.

macoratti04

Itálico

A opção Itálico permite definir o estilo itálico para o texto selecionado. Para isso, usamos a propriedade SelecionFont que obtém ou define a fonte de seleção ou de ponto de inserção de texto atual e definimos o estilo como Italic.

macoratti03

Sublinhado

A opção Sublinhado permite definir o estilo itálico para o texto selecionado. Para isso, usamos a propriedade SelecionFont, que obtém ou define a fonte de seleção ou de ponto de inserção de texto atual e definimos o estilo como Underline.

macoratti02

Alterar fonte

A opção Alterar Fonte permite alterar a fonte atual. Para isso, é aberta uma janela de diálogo Fonte (FontDialog) onde o usuário pode escolher uma fonte e definir o seu estilo e tamanho.

macoratti01

Alinhar texto

A opção Alinhar Texto permite alinhar o texto. Para isso, usamos a propriedade SelectionAlignment que obtém ou define o alinhamento para aplicar a seleção ou o ponto de inserção atual.

Temos 3 opções:

  • Esquerda – HorizontalAlignment.Left

  • Direita – HorizontalAlignment.Right

  • Centro – HorizontalAlignment.Center

 private void mnuAlinharEsquerda_Click(object sender, EventArgs e)
       {
            rtxtb1.SelectionAlignment = HorizontalAlignment.Left;
       }
       private void mnuAlinhaDireita_Click(object sender, EventArgs e)
       {
            rtxtb1.SelectionAlignment = HorizontalAlignment.Right;
       }
       private void mnuAlinharCentro_Click(object sender, EventArgs e)
       {
            rtxtb1.SelectionAlignment = HorizontalAlignment.Center;
       }

Na próxima parte do artigo, vamos continuar implementando as funcionalidades de impressão para o texto do editor de texto.