Neste artigo vou mostrar como podemos localizar e destacar o texto localizado em um controle RichtTextBox. |
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 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.
Neste artigo vou usar o método Find para mostrar como localizar strings em um texto, destacando cada uma das ocorrências.
Recursos usados :
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
A seguir selecione Visual Basic -> Windows -> Windows Forms Application;
Informe o nome LocalizaDestacaTexto_RichTextBox e clique no botão OK;
A partir da ToolBox inclua os seguintes controles no formulário form1.vb:
MenuStrip : MenuStrip1
RichTextBox : rtb1
Disponha os controles conforme o leiaute da figura abaixo:
No evento Click da opção Abrir (mnuAbrir) do menu inclua o código a seguir que irá permitir selecionar um arquivo texto e exibi-lo no controle RichTextBox (rtb1):
Private Sub mnuAbrir_Click(sender As Object, e As EventArgs) Handles mnuAbrir.Click Dim ofd1 As New OpenFileDialog If ofd1.ShowDialog = Windows.Forms.DialogResult.OK Then rtb1.Text = My.Computer.FileSystem.ReadAllText(ofd1.FileName) End If End Sub |
Criamos uma instância do controle OpenFileDialog e a seguir usando o recurso My lemos e atribuímos o arquivo texto ao controle RichTextBox.
No evento Click da opção Localizar no menu inclua o código abaixo:
Private Sub mnuLocalizar_Click(sender As Object, e As EventArgs) Handles mnuLocalizar.Click Dim i As Integer = 0 Dim Prompt As String = "Informe o Texto " Dim Titulo As String = "Procurar" Dim respostaPadrao As String = "" Dim XPos As Integer = 750 Dim YPos As Integer = 400 Dim strTexto As String strTexto = InputBox(Prompt, Titulo, respostaPadrao, XPos, YPos) If Not String.IsNullOrWhiteSpace(strTexto) Then While i < rtb1.Text.LastIndexOf(strTexto) rtb1.Find(strTexto, i, rtb1.TextLength, RichTextBoxFinds.None) rtb1.SelectionBackColor = Color.Orange i = rtb1.Text.IndexOf(strTexto, i) + 1 End While End If End Sub |
Este código usa a função inputbox que exibe um prompt em uma caixa de diálogo que aguarda que um texto seja informado ou um dos botões seja clicado e então retorna uma string contendo o conteúdo do TextBox.
Verificamos a seguir se a string retornada (strTexto) é vazia e a seguir iniciamos um laço while onde percorremos todo o texto localizando a string.
O comando usado para localizar a string é :
rtb1.Find(strTexto, i, rtb1.TextLength, RichTextBoxFinds.None)
A sintaxe para esse comando é a seguinte :
RichTextBox.Find(String str, int start, int end,
RichTextBoxFinds options) onde:
str - É o texto a localizar no controle.
start - É o local dentro do texto do controle para começar a
procurar.
end - É o local dentro do texto do controle para finalizar a
pesquisa. Este valor deve ser igual a -1 ou maior ou igual ao parâmetro
start .
options - Uma enumeração que pode ter o seguintes valores:
Para destacar o texto usando o código : rtb1.SelectionBackColor = Color.Orange
Finalmente no evento Click da opção Sair do menu inclua o código para encerrar a aplicação:
Private Sub mnuSair_Click(sender As Object, e As EventArgs) Handles mnuSair.Click Application.Exit() End Sub |
Executando o projeto e informando uma palavra para pesquisa. Obtemos o resultado abaixo:
Para remover o destaque da última palavra selecionada inclua o código destacado em azul na opção Localizar:
Private Sub mnuLocalizar_Click(sender As Object, e As EventArgs) Handles mnuLocalizar.Click Dim i As Integer = 0 Dim temp As String = rtb1.Text rtb1.Text = temp Dim Prompt As String = "Informe o Texto " Dim Titulo As String = "Procurar" Dim respostaPadrao As String = "" Dim XPos As Integer = 750 Dim YPos As Integer = 400 Dim strTexto As String strTexto = InputBox(Prompt, Titulo, respostaPadrao, XPos, YPos) If Not String.IsNullOrWhiteSpace(strTexto) Then While i < rtb1.Text.LastIndexOf(strTexto) rtb1.Find(strTexto, i, rtb1.TextLength, RichTextBoxFinds.None) rtb1.SelectionBackColor = Color.Orange i = rtb1.Text.IndexOf(strTexto, i) + 1 End While End If End Sub |
Pegue o projeto completo aqui : LocalizaDestacaTexto_RichTextBox.zip
(Disse Jesus) - Em verdade, em verdade vos digo que vem a hora, e agora é, em
que os mortos ouvirão a voz do Filho de Deus, e os que a ouvirem viverão.
João 5:25
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET