Jump to content
Super Oliks

Selecionar palavras em um texto

Recommended Posts

Super Oliks

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?

Share this post


Link to post
Share on other sites
ribeiro55

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"

Share this post


Link to post
Share on other sites
Super Oliks

Sim preciso da solução. Pois estou começando a melhorar os meus conhecimentos em programação, e o agradeceria muito pela ajuda. ;)'

Share this post


Link to post
Share on other sites
ribeiro55

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"

Share this post


Link to post
Share on other sites
Super Oliks

muito obrigado, era exatamente o que eu queria. Como faço agora para esse tópico aparecer como resolvido  ;)

Share this post


Link to post
Share on other sites
Caça

No canto inferior esquerdo tens um botão chamado "Topic Solved"


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Super Oliks

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  :(

Share this post


Link to post
Share on other sites
ribeiro55

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"

Share this post


Link to post
Share on other sites
Super Oliks

Sim deu certo, e realmente é muito simples, eu é que estava com dificuldades, e tentei fazer de uma maneira diferente e acabei me confundindo ainda mais, obrigado pela ajuda.

Share this post


Link to post
Share on other sites
Juca

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.

Share this post


Link to post
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

×
×
  • 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.