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:
- text – Trata o texto no formato normal
- 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.
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:
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:
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.
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
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.
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.
Salvar
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.
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.
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.
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.
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.
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.
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.