C# - Editor de Texto com RichTextBox e PrintDocument - I
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 artigo 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 outros artigos. 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:
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 sítios 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 protegido 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 namespace System.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 classe Graphics. 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:
Criando o Editor de Textos
Então abra o VS Community 2013 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ão Add;
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:
|
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:
|
|
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 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.
private void mnuNovo_Click(object sender, EventArgs e)
{
ChamaSalvarArquivo();
rtxtb1.Clear();
rtxtb1.Focus();
}private void toolStripNovo_Click(object sender, EventArgs e)
{
ChamaSalvarArquivo();
rtxtb1.Clear();
rtxtb1.Focus();
}private void ChamaSalvarArquivo()
{
if (!string.IsNullOrEmpty(rtxtb1.Text))
{
if ((MessageBox.Show("Deseja Salvar o arquivo ?", "Salvar Arquivo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes))
{
Salvar_Arquivo();
}
}
}private void Salvar_Arquivo() { try { // Pega o nome do arquivo para salvar if (this.svdlg1.ShowDialog() == DialogResult.OK) { // abre um stream para escrita e cria um StreamWriter para implementar o stream FileStream fs = new FileStream(svdlg1.FileName, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.Flush(); // Escreve para o arquivo usando a classe StreamWriter m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin); // escreve no controle richtextbox m_streamWriter.Write(this.rtxtb1.Text); // fecha o arquivo m_streamWriter.Flush(); m_streamWriter.Close(); } } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
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.
private void mnuAbrir_Click(object sender, EventArgs e)
{
AbrirArquivo();
}private void toolStripAbrir_Click(object sender, EventArgs e)
{
AbrirArquivo();
}private void AbrirArquivo() { //define as propriedades do controle //OpenFileDialog this.ofd1.Multiselect = true; this.ofd1.Title = "Selecionar Arquivo"; ofd1.InitialDirectory = @"C:\Dados\"; //filtra para exibir somente arquivos textos ofd1.Filter = "Images (*.TXT)|*.TXT|" + "All files (*.*)|*.*"; ofd1.CheckFileExists = true; ofd1.CheckPathExists = true; ofd1.FilterIndex = 1; ofd1.RestoreDirectory = true; ofd1.ReadOnlyChecked = true; ofd1.ShowReadOnly = true;
DialogResult dr = this.ofd1.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { try { FileStream fs = new FileStream(ofd1.FileName, FileMode.Open, FileAccess.Read); StreamReader m_streamReader = new StreamReader(fs); // Lê o arquivo usando a classe StreamReader m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin); // Lê cada linha do stream e faz o parse até a última linha this.rtxtb1.Text = ""; string strLine = m_streamReader.ReadLine(); while (strLine != null) { this.rtxtb1.Text += strLine + "\n"; strLine = m_streamReader.ReadLine(); } // Fecha o stream m_streamReader.Close(); } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
Salvar
private void mnuSalvar_Click(object sender, EventArgs e)
{
ChamaSalvarArquivo();
}
private void toolStripSalvar_Click(object sender, EventArgs e) { ChamaSalvarArquivo(); }
Nota: o método ChamaSalvarArquivo() usado aqui é o mesmo usado na opção Novo.
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.
private void mnuCopiar_Click(object sender, EventArgs e)
{
Copiar();
}private void toolStripCopiar_Click(object sender, EventArgs e)
{
//Copiar();
mnuCopiar.PerformClick();
}private void Copiar() { if (rtxtb1.SelectionLength > 0) { rtxtb1.Copy(); } }
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.
private void mnuColar_Click(object sender, EventArgs e)
{
Colar();
}private void toolStripColar_Click(object sender, EventArgs e)
{
Colar();
}private void Colar() { rtxtb1.Paste(); }
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.
private void mnuNegrito_Click(object sender, EventArgs e) { Negritar(); }
private void toolStripNegrito_Click(object sender, EventArgs e)
{
Negritar();
}private void Negritar() { string nome_fonte = null; float tamanho_fonte = 0; bool negrito = false; nome_fonte = rtxtb1.Font.Name; tamanho_fonte = rtxtb1.Font.Size; negrito = rtxtb1.Font.Bold; if (negrito == false) { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.Bold); } else { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.Regular); } }
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.
private void mnuItalico_Click(object sender, EventArgs e)
{
Italico();
} private void toolStripItalico_Click(object sender, EventArgs e) { Italico(); }private void Italico() { string nome_fonte = null; float tamanho_fonte = 0; bool italico = false; nome_fonte = rtxtb1.Font.Name; tamanho_fonte = rtxtb1.Font.Size; italico = rtxtb1.Font.Italic;
if (italico == false) { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.Italic); } else { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.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.
private void mnuSublinhado_Click(object sender, EventArgs e) { Sublinhar(); } private void toolStripSublinhado_Click(object sender, EventArgs e) { Sublinhar(); }private void Sublinhar() { string nome_fonte = null; float tamanho_fonte = 0; bool sublinha = false; nome_fonte = rtxtb1.Font.Name; tamanho_fonte = rtxtb1.Font.Size; sublinha = rtxtb1.Font.Underline; if (sublinha == false) { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.Underline); } else { rtxtb1.SelectionFont = new Font(nome_fonte, tamanho_fonte, FontStyle.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.
private void mnuAlteraFonte_Click(object sender, EventArgs e)
{
AlterarFonte();
} private void toolStripFonte_Click(object sender, EventArgs e) { AlterarFonte(); }private void AlterarFonte() { DialogResult result = fontdlg1.ShowDialog(); if (result == DialogResult.OK) { if (rtxtb1.SelectionFont != null) { rtxtb1.SelectionFont = fontdlg1.Font; } } }
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.
Disse-lhes Jesus: Em verdade, em
verdade vos digo que antes que Abraão existisse, Eu Sou.
João 8:58
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: