Jump to content

Selecionar palavras em um texto


Super Oliks
 Share

Recommended Posts

sabe quando você exibe o código fonte de uma página da web, ai vc aperta "ctrl + f" , ai aparece uma caixa de dialogo, pata você digitar a palavra ou frase que está procurando na página?, gostaria de criar um aplicativo desse só que para selecionar uma palavra ou letra, que esteja no richtexto, aqui no site quando vc escrever em "pesquisar" ai aparece várias palavra com fundo amarelo, é simplesmente isso que estou querendo fazer.... só que não tenho nem idéia de como começar ..... podem me da uma dica?

Link to comment
Share on other sites

Olá Super Oliks.

A RichTextBox tem um método chamado "Find" que nos devolve o índice, do primeiro caractere, da primeira ocorrência.

Só precisas de garantir que vais continuar a procurar no índice imediatamente depois do que já encontraste mais o comprimento da string de pesquisa.

Precisas da solução?

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Bem, desde que entendas o raciocínio e o consigas aplicar, por mim está tudo bem. Cada um sabe de si 😉

Colocas este sub onde quiseres:

    Public Sub ProcurarRT(ByVal RTB As RichTextBox, ByVal CorDescoberta As Color, ByVal TextoAEncontrar As String)
        RTB.SelectAll()
        RTB.SelectionBackColor = RTB.BackColor

        Dim descobertaIndex As Integer = 0
        descobertaIndex = RTB.Find(TextoAEncontrar, descobertaIndex + TextoAEncontrar.Length, RichTextBoxFinds.MatchCase)
        While descobertaIndex >= 0
            RTB.SelectionStart = descobertaIndex
            RTB.SelectionLength = TextoAEncontrar.Length
            RTB.SelectionBackColor = CorDescoberta
            If descobertaIndex + TextoAEncontrar.Length >= RTB.Text.Length Then
                descobertaIndex = -1
            Else
                descobertaIndex = RTB.Find(TextoAEncontrar, descobertaIndex + TextoAEncontrar.Length, RichTextBoxFinds.NoHighlight)
            End If
        End While
        RTB.SelectionLength = 0
    End Sub

E chamas o método da seguinte forma:

ProcurarRT(RichTextBox1, Color.YellowGreen, TextBox1.Text)

Onde RichTextBox1 é a tua richtextbox, Color.YellowGreen é a cor que queres utilizar para marcar os "matches" e TextBox1.Text a cadeia de caracteres que queres procurar.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Eu pensei que tinha conseguido intender a solução ribeiro, mas não consegui :wallbash:, mas tentei de uma outra forma e também não deu certo.

   Private Sub Button10_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button10.Click

        'ler o texto da richtextbox
        Dim color As String = RichTextBox1.Text
        'selecionar as palavras
        Dim backcolor() As String = Drawing.Color.Yellow("megaupload")
        'Obtém a quantidade de palavras
        Dim backcolor As Integer = backcolor.Length
        'Exib o resultado
        RichTextBox2.Text = ("O servidor é " & Color & " palavras.")

    End Sub

confesso que estou muito perdido e nem sei o que estou fazendo de certo e de errado, conto com ajuda do pessoa do p@p  😞

Link to comment
Share on other sites

Mas que mistura que para aí vai.

A minha solução é do mais simples de implementar:

Copias o primeiro sub para onde quiseres, sem lhe mexer.

Depois, para testares, dá dois cliques numa textbox qualquer que tenhas para aí, e aparece-te o sub do handler do TextChanged, que corre sempre que há uma alteração no texto.

Nesse sub, colocas simplesmente:

ProcurarRT(RichTextBox1, Color.YellowGreen, TextBox1.Text)

Onde RichTextBox1 é a tua richtextbox e TextBox1 é uma caixa de texto para escrever o que se está a procurar.

Não consigo simplificar mais que isto, e não tem nada que saber... só precisas de copiar e trocar os nomes...

Devias era, depois, tentar entender o que está feito, senão não aprendeste absolutamente nada.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Montei um projeto para testar o que o amigo colocou no tópico. Funcionou 99%. Peço a ajuda de vocês para solucionar o 1%.

Public Class Form1

Public Sub ProcurarRT(ByVal RTB As RichTextBox, ByVal CorDescoberta As Color, ByVal TextoAEncontrar As String)

RTB.SelectAll()

RTB.SelectionBackColor = RTB.BackColor

Dim descobertaIndex As Integer = 0

descobertaIndex = RTB.Find(TextoAEncontrar, descobertaIndex + TextoAEncontrar.Length, RichTextBoxFinds.MatchCase)

While descobertaIndex >= 0

RTB.Selectionstart = descobertaIndex

RTB.SelectionLength = TextoAEncontrar.Length

RTB.SelectionBackColor = CorDescoberta

If descobertaIndex + TextoAEncontrar.Length >= RTB.Text.Length Then

descobertaIndex = -1

Else

descobertaIndex = RTB.Find(TextoAEncontrar, descobertaIndex + TextoAEncontrar.Length, RichTextBoxFinds.NoHighlight)

End If

End While

RTB.SelectionLength = 0

End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

ProcurarRT(RichTextBox1, Color.YellowGreen, TextBox1.Text)

End Sub

End Class

Coloquei o texto abaixo de dois parágrafos no RichTextBox1

Onde RichTextBox1 é a tua richtextbox, Color.YellowGreen é a cor que queres utilizar para marcar os "matches" e TextBox1.Text a cadeia de caracteres que queres procurar onde.

Onde RICH TextBox1 é a tua richtextbox, Color.YellowGreen é a cor que queres utilizar para marcar os "matches" e TextBox1.Text a cadeia de caracteres que queres procurar ONDE.

1 – Ele não encontra a primeira palavra do primeiro parágrafo (Onde), mesmo digitando corretamente.

2 – Se digitar Rich, ele acha Rich e RICH e não acha rich

3 – Se digitar Onde ele acha Onde e ONDE e não acha onde

Como resolver estes problemas, não importando a forma de digitar a palavra em maiúscula ou minuscula para pesquisa no TextBox1 e encontrar no texto todas as formas possíveis.

Obrigado.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.