
Aula 70 – RichTextBox, ToolStrip, FontDialog e ColorDialog
Está aula faz parte do meu curso completo Visual Basic .net Beginners 2.0. Onde demonstro no módulo 7 como trabalhar com o controle RichTextBox.
Mas para trabalhar com este controle vamos criar um editor de texto utilizando os controles já demonstrado nas aulas anteriores.
Veja a aula completa abaixo em passo a passo:
Vamos começar o desenvolvimento criando um novo projeto do tipo Windows Forms App (.NET Framework) de nome RichTextBox.
Agora vamos adicionar os seguintes controles no formulário:
- ToolStrip – Name: tosPrincipal
- ColorDialog – Name: cldColor
- FontDialog – Name: ftdFonte
- OpenFileDialog – Name: ofdAbrirDocumento
- SaveFileDialog – Name: sfdSalvarDocumento
- RichTextBox – Name: rtbTexto

Os ícones da ToolStrip foram retirados do site IconFinder.
Antes de criar os botões da barra de ferramentas, vamos definir as variáveis de controle que vai determinar se o documento foi aberto ou salvo.
Imports System.Windows.Forms.Clipboard
Public Class frmEditor
'Declarações Boolean
Private blnSalvar As Boolean = False
Private blnAbertoSalvo = False
'
'Declaração String
Private strCaminho As String
End Class
O próximo passo será a criação dos botões da barra de ferramenta como mostrado na imagem acima.
Para criar os botões seleciona a ToolStrip, clique na seta para baixo e selecione o tipo Button.

Botão Novo Documento será configurado da seguinte forma:

Private Sub tsbNovoDocumento_Click(sender As Object, e As EventArgs) Handles tsbNovoDocumento.Click
'Criando um novo documento
If blnSalvar = True Then
Dim result = MessageBox.Show("Você deseja salvar o documento atual?", "Atenção",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3)
Select Case result
Case DialogResult.Yes
'Salvar documento
tsbSalvarDocumento_Click(Nothing, Nothing)
rtbTexto.ResetText()
rtbTexto.Clear()
blnAbertoSalvo = False
blnSalvar = False
tsbSalvarDocumento.Enabled = False
tsbDesfazer.Enabled = False
tsbRefazer.Enabled = False
Case DialogResult.No
'Resetar o controle RichTextBox
rtbTexto.ResetText()
rtbTexto.Clear()
blnAbertoSalvo = False
blnSalvar = False
tsbSalvarDocumento.Enabled = False
tsbDesfazer.Enabled = False
tsbRefazer.Enabled = False
End Select
Else
'Resetar o controle RichTextBox
rtbTexto.ResetText()
rtbTexto.Clear()
blnAbertoSalvo = False
blnSalvar = False
tsbSalvarDocumento.Enabled = False
tsbDesfazer.Enabled = False
tsbRefazer.Enabled = False
End If
End Sub
Botão Abrir Documento será configurado da seguinte forma:

Private Sub tsbAbrirDocumento_Click(sender As Object, e As EventArgs) Handles tsbAbrirDocumento.Click
'Abrir documento existente
ofdAbrirDocumento.Title = "Abrir Documento"
ofdAbrirDocumento.Filter = "Documento rft|*.rft"
ofdAbrirDocumento.FileName = ""
If ofdAbrirDocumento.ShowDialog(Me) = DialogResult.OK Then
rtbTexto.LoadFile(ofdAbrirDocumento.FileName)
strCaminho = ofdAbrirDocumento.FileName
blnAbertoSalvo = True
End If
End Sub
Botão Salvar Documento será configurado da seguinte forma:

Private Sub tsbSalvarDocumento_Click(sender As Object, e As EventArgs) Handles tsbSalvarDocumento.Click
'Salvar documento
If blnSalvar = True Then
If blnAbertoSalvo = False Then
sfdSalvarDocumento.Title = "Salvar Documento"
sfdSalvarDocumento.Filter = "Documento rft|*.rft"
sfdSalvarDocumento.FileName = ""
If sfdSalvarDocumento.ShowDialog(Me) = DialogResult.OK Then
rtbTexto.SaveFile(sfdSalvarDocumento.FileName)
strCaminho = sfdSalvarDocumento.FileName
blnAbertoSalvo = True
End If
Else
rtbTexto.SaveFile(strCaminho)
End If
End If
End Sub
Botão Copiar será configurado da seguinte forma:

Private Sub tsbCopiar_Click(sender As Object, e As EventArgs) Handles tsbCopiar.Click
rtbTexto.Copy()
End Sub
Botão Recortar será configurado da seguinte forma:

Private Sub tsbRecortar_Click(sender As Object, e As EventArgs) Handles tsbRecortar.Click
rtbTexto.Cut()
End Sub
Botão Colar será configurado da seguinte forma:

Private Sub tsbColar_Click(sender As Object, e As EventArgs) Handles tsbColar.Click
If Clipboard.ContainsText Then
rtbTexto.Paste()
End If
End Sub
Botão Desfazer será configurado da seguinte forma:

Private Sub tsbDesfazer_Click(sender As Object, e As EventArgs) Handles tsbDesfazer.Click
rtbTexto.Undo()
tsbRefazer.Enabled = True
End Sub
Botão Refazer será configurado da seguinte forma:

Private Sub tsbRefazer_Click(sender As Object, e As EventArgs) Handles tsbRefazer.Click
rtbTexto.Redo()
End Sub
Botão fonte será configurado da seguinte forma:

Private Sub tsbFonte_Click(sender As Object, e As EventArgs) Handles tsbFonte.Click
If ftdFonte.ShowDialog(Me) = DialogResult.OK Then
rtbTexto.SelectionFont = ftdFonte.Font
End If
End Sub
Botão Cor da Fonte será configurado da seguinte forma:

Private Sub tsbCorFonte_Click(sender As Object, e As EventArgs) Handles tsbCorFonte.Click
If cldCor.ShowDialog(Me) = DialogResult.OK Then
rtbTexto.SelectionColor = cldCor.Color
End If
End Sub
Botão Negrito será configurado da seguinte forma:

Private Sub tsbNegrito_Click(sender As Object, e As EventArgs) Handles tsbNegrito.Click
rtbTexto.SelectionFont = New Font(rtbTexto.SelectionFont, FontStyle.Bold)
End Sub
Botão Itálico será configurado da seguinte forma:

Private Sub tsbItalico_Click(sender As Object, e As EventArgs) Handles tsbItalico.Click
rtbTexto.SelectionFont = New Font(rtbTexto.SelectionFont, FontStyle.Italic)
End Sub
Botão Riscado será configurado da seguinte forma:

Botão Sublinhado será configurado da seguinte forma:

Private Sub tsbSublinhado_Click(sender As Object, e As EventArgs) Handles tsbSublinhado.Click
rtbTexto.SelectionFont = New Font(rtbTexto.SelectionFont, FontStyle.Underline)
End Sub
Botão Alinha à Esquerda será configurado da seguinte forma:

Private Sub tsbAlinharEsquerda_Click(sender As Object, e As EventArgs) Handles tsbAlinharEsquerda.Click
rtbTexto.SelectionAlignment = HorizontalAlignment.Left
End Sub
Botão Alinhar no Centro será configurado da seguinte forma:

Private Sub tsbAlinharCentro_Click(sender As Object, e As EventArgs) Handles tsbAlinharCentro.Click
rtbTexto.SelectionAlignment = HorizontalAlignment.Center
End Sub
Botão Alinha à Direita será configurado da seguinte forma:

Private Sub tsbAlinharDireita_Click(sender As Object, e As EventArgs) Handles tsbAlinharDireita.Click
rtbTexto.SelectionAlignment = HorizontalAlignment.Right
End Sub
Agora que já foi programado todos os botões da barra de ferramentas, vamos programar alguns eventos do controle RichTextBox para controla a ativação dos botões de salvar, copiar, recortar.
Private Sub rtbTexto_TextChanged(sender As Object, e As EventArgs) Handles rtbTexto.TextChanged
tsbSalvarDocumento.Enabled = True
tsbDesfazer.Enabled = True
blnSalvar = True
End Sub
Private Sub rtbTexto_SelectionChanged(sender As Object, e As EventArgs) Handles rtbTexto.SelectionChanged
If rtbTexto.SelectedText.Count > 0 Then
tsbCopiar.Enabled = True
tsbRecortar.Enabled = True
Else
tsbCopiar.Enabled = False
tsbRecortar.Enabled = False
End If
End Sub
E por fim vamos programar o evento Ativated do formulário para controlar a ativação do botão de colar.
Private Sub frmEditor_Activated(sender As Object, e As EventArgs) Handles Me.Activated
If Clipboard.ContainsText Then
tsbColar.Enabled = True
End If
End Sub
