VB znajdowanie fraz tekstu w RichTextBox

Witam.

Może ktoś wie jak program w visual basic może znaleźć w tekście zadaną frazę

w RichText Box we wszystkich miejscach, w których ta fraza występuje.

Np. chciałbym, aby wszystkie słowa “text” miały inną czcionkę niż pozostałe.

Metoda FIND znajduje tylko jedną frazę i kończy szukanie.

Pozdrawiam

Możesz ponownie uruchomić tą metodę od miejsca gdzie znaleziono ostatni tekst.

Dzięki.

Ale jak to zrobić?

W pętle. Pierwszy parametr metody Find, skąd zacząć wyszukiwanie. Zwracana pozycja znaleziona. Kolejne wyszukiwanie trzeba zacząć od ostatniej znalezionej plus jeden.

W VB jest funkcja wyszukiwania którą wywołujesz:

i=instr(start,tekst1,tekst2)

gdzie start to początek wyszukiwania. Deklarujesz zmienną start w general:

dim start as integer

dim tekst1, tekst2 as string

i nadajesz jej początkową wartość start = 1.

Private Sub Form_Load()

start = 1

end sub

Tekst1 to zmienna typu string i niech np. tekst1=text1.text (tekst przeszukiwany) tekst2 to zmienna która której szukamy. Umieszczamy na formie okieknko tekstowe o nazwie text2 oraz przycisk command1 i nadajemy mu nazwę np. szukaj i piszemy procedurę:

Private Sub szukaj_Click()

dim i,j as integer

tekst1=text1.text: tekst2=text2.text

If InStr(start,tekst1, tekst2) Then

j = InStr(start,tekst1, tekst2): text1.SelStart = j - 1: text1.SelLength = Len(tekst2): text1.SetFocus

start=j+len(tekst2)

Exit Sub

else

if start=1 then msgbox "Nie znaleziono." else msgbox "Nie znaleziono więcej."

start=1

end if

end sub

Po każdym naciśnięciu klawisza szukaj zostanie wskazane nastepne wyszukanie.

Serdeczne dzięki. To co napisałeś jest cenne i na pewno mi się przyda. Jednak chodzi mi o coś innego.

Chciałbym, aby program sam wyszukał wszystkie miejsca występowania zadanej frazy, aby można było kolejną

instrukcją zmienić fonty w tych frazach.

Pozdrawiam

http://msdn.microsoft.com/en-us/library/aa335479%28VS.71%29.aspx

Tak niejasno tłumaczysz o co ci chodzi, że nic dziwnego, że nie można Ci pomóc.

W języku VB nie ma takiej metody jak : “FIND” chyba, że się taką procedurę lub funkcję samemu napisze albo gdzieś ściągnie. Być może chodzi Ci nie o taką procedurę w Twoim programie ale o taką procedurę występującą w programie VB ale to całkiem inna bajka. W takim wypadku należało by użyć zamiast ‘Find’ procedury Replace’ i ‘Replace All’

Czyli klinąć Edit–>Replace—>Replace All i zamieniasz wszystko co chcesz na nowe wpisy.

floyd , RichTextBox ma metodę Find

Rzeczywiście :slight_smile: Można by jedynie dodać, że dotyczy VB.NET, C++, C# czy JScript, a to oznacza, że trzeba by chyba precyzyjnie podawać w jakim języku się pisze.

A samo rozwiązanie problemu to rzeczywiście jak napisałeś wcześniej zastosować pętlę i tyle.

Wytłumaczę dokładnie o co mi chodzi.

Chciałbym, aby w tekście wpisanym w RichTextBox (w fazie projektowania) po uruchomieniu programu

pewne fragmenty wyświetliły się z inną czcionką (np wszystkie litery “a” miały bold

i inna wysokość).

Pozdrawiam

jeżeli znaleziono tekst to zapodajesz:

RichTextBox1.SelectionColor=value

Tak, tylko tego co nie wiem to jak znaleźć zadany tekst we wszystkich miejscach.

Metoda “find” znajduje tekst tylko w jednym miejscu.

Więc przeczytaj pierwsze dwa moje posty w tym temacie.

Tu masz jeszcze jeden przykład gdzie okienko tekstowe ma nazwę:RichTextBox1

i klawisz command1 umieszczony na formie zawiera procedurę:

Oczywiście procedurę możesz umieszczać też gdzie indziej np form_load.

Private Sub Command1_Click()

Dim pom, pom1 As String

Dim i As Integer

pom = "Pan kotek był chory i leżał w łóżeczku i przyszedł kot doktór. Jak się masz koteczku."

RichTextBox1.text = pom

pom1 = "kot"

Do While RichTextBox1.Find(pom1, i) <> true

i = RichTextBox1.Find(pom1, i)

RichTextBox1.SelStart = i

RichTextBox1.SelLength = Len(pom1)

RichTextBox1.SelFontName = "Arial"

RichTextBox1.SelFontSize = 15

RichTextBox1.SelBold = true

RichTextBox1.SelItalic = true

RichTextBox1.SelUnderline =true

RichTextBox1.SelColor = &HFAAAAA

i = i + Len(pom2) + 1

Loop

End Sub

Przyznaję, że nie znałem tego okienka tekstowego czyli też przy okazji coś skorzystałem bo mi się podoba. :slight_smile:

Dzięki. O to mi chodziło.

Serdecznie pozdrawiam

Tak przy okazji to chciałem dodać, że w VB nie musi się koniecznie korzystać z metody fIND. Ten sam efekt uzyskamy korzystając ze standardowej funkcji wyszukiwania: i= InStr(i, pom, pom1) Różnica między tymi dwiema funkcjami jest taka, że w Find() pierwszemu znakowi tekstu jest przyporządkowana liczba 0, a w instr() liczba 1.

Procedura by wówczas wyglądała.

Dim pom, pom1 As String

Dim i As Integer

pom = "Pan kotek był chory i leżał w łóżeczku i przyszedł kot doktór. Jak się masz koteczku."

RichTextBox1.Text = pom

pom1 = "kot"

i = 1

Do While InStr(i, pom, pom1) >= 1

i = InStr(i, pom, pom1)

RichTextBox1.SelStart = i - 1

RichTextBox1.SelLength = Len(pom1)

RichTextBox1.SelFontName = "Arial"

RichTextBox1.SelFontSize = 15

RichTextBox1.SelBold = True

RichTextBox1.SelItalic = True

RichTextBox1.SelUnderline = True

RichTextBox1.SelColor = &HFAAAAA

i = i + Len(pom2) + 1

Loop

RichTextBox1.SelStart = 0

Dzięki. O to właśnie mi chodziło.

Serdecznie pozdrawiam

Dodane 26.11.2009 (Cz) 13:03

Dzięki. O to właśnie mi chodziło.

Pozdrawiam