Mam aplikację, do której chciałbym dodać "wyszukiwarkę tekstu".
Tzn, po wpisaniu do TextBox wyrazu "przykladowy tekst", miałaby przeszukać wszystkie istniejące RichTexBoxy i odtworzyć zakładkę w której się znajdzie ten "przykladowy tekst".
Prosiłbym o jakieś propozycję jak to zrobić. Dziękuję
Tak miało być, poprzedni post do usunięcia (nacisnąłem tab i spacja i post się wysłał, o :D)
dla każdego (RichTextBox o numerze większym od 1)
znaleziono = wyszukaj (ciąg znaków z RichTextBox[1])
jeśli (znaleziono)
przejdź do tego bieżącego RichTextBox
szukać dalej ? ok : wyskocz z pętli
koniec jeśli
następny RichTextBox
koniec dla każdego
foreach(RichTextBox box in RichTextBoxList)
{
int pos=box.Text.IndexOf(PrzykladowyTekst); // Zastanowić się nad http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.find%28v=vs.110%29.aspx
if(pos>=0)
{
box.SelectionStart=pos;
box.SelectionLength=PrzykladowyTekst.Length;
TabControl1.SelectedTab=TabPage(box.Parent);
box.Focus();
break;
}
}
Patrz komentarz, dokładniej w poście od @vpiotr niżej.
pisze w Visual Basic...
kod ktory napisales jest chyba do C++
To jest .NET wszystkie metody oraz właściwości nazywają się tak samo, natomiast foreach, for oraz if pewnie rozpoznałeś.
pisze w Visual Basic...
pisanie dla .NET w czymkolwiek innym niż C# powoduje że i tak musisz poznać C# (bo w tym języku będzie większość przykładów, tutoriali…) a wtedy wątpliwym staje się wybór czegokolwiek innego niż C#.
To jak z Fordem, który sprzedawano w każdym kolorze pod warunkiem że był to czarny.
visualbacic23 napisał(a):
pisze w Visual Basic...
kod ktory napisales jest chyba do C++
W C#. I jest na to prosta rada: http://www.developerfusion.com/tools/convert/csharp-to-vb/
zrobilem cos takiego:
Dim searchstring As String = TextBox1.Text
' The word you're looking for
Dim count As New List(Of Integer)()
For i As Integer = 0 To RichTextBox1.Text.Length - 1
If RichTextBox1.Text.IndexOf(searchstring, i) <> -1 Then
'If the word is found
'Add the index to the list
count.Add(RichTextBox1.Text.IndexOf(searchstring, i))
End If
Next
Try
For i As Integer = 0 To count.Count - 1
RichTextBox1.[Select](count(i), searchstring.Length)
RichTextBox1.SelectionColor = Color.Red
RichTextBox1.SelectionFont = New Font(RichTextBox1.Font, FontStyle.Bold)
count.RemoveAt(i)
Next
Catch
End Try
RichTextBox1.[Select](RichTextBox1.Text.Length, 0)
RichTextBox1.SelectionFont = New Font(RichTextBox1.Font, FontStyle.Italic)
co tu zmienic by wyszukiwanie bylo we wszystkich RichTextBox a nie tylko w jednym?
zamiana znacznika <code class="delphi"> na <code class="vbnet"> - fp
Skoro zostałem już wywołany to odpiszę... Nie znam Visual Basic'a i dziś nie mam czasu na odp.
Wydaje mi się, że źle podszedłeś do problemu tworząc setkę zakładek - robiłeś to ręcznie? Opisz co jest twoim celem a może uda się lepiej zaprojektować tą aplikację. Może lepiej byłoby stworzyć listę plików w 1 komponencie i szukać frazy w nich dopiero gdy znajdzie zaznaczać pozycje jakiegoś ListBox i otwierać dynamicznie zakładkę z RichBox'em dopiero na żądanie.
Użytkownik i tak nie ogarnie poruszania się po 100 zakładkach - to jest naprawdę uciążliwe.
Tworząc dynamicznie komponenty masz tą zaletę, że przy tworzeniu możesz sobie od razu wrzucić ten komponent do tablicy aby później go nie szukać. Teraz odnalezienie konkretnego komponentu jest kłopotliwe (choć możliwe).
to jest swojego rodzaju "baza danych"
w kazdej zakladce są inne informacje w richtextboxach...uzytkownik po zakladkach raczej nie bedzie sie poruszać wcale, po za wyjątkiem sporadycznego wyszukania jakiejś konkretnej zakładki zawierającej "przykladowy tekst"...
w tym celu jest mi potrzebne zrobienie takiej wyszukiwarki co będzie szukać we wszystkich richtextboxach..
Na podstawie tego co @ _13th_Dragon podał:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim SearchText As String = "test"
Dim ctrl, ctrl2 As Control
For Each ctrl In TabControl1.Controls
If TypeOf (ctrl) Is TabPage Then
Dim page As TabPage = ctrl
For Each ctrl2 In page.Controls
If TypeOf (ctrl2) Is RichTextBox Then
Dim box As RichTextBox = ctrl2
Dim pos As Integer = box.Text.IndexOf(SearchText)
If (pos >= 0) Then
box.SelectionStart = pos
box.SelectionLength = SearchText.Length
TabControl1.SelectedTab = box.Parent
box.Focus()
Exit Sub
End If
End If
Next
End If
Next
End Sub
kAzek napisał(a):
Na podstawie tego co @ _13th_Dragon podał:
Dim pos As Integer = box.Text.IndexOf(SearchText)
http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.find%28v=vs.110%29.aspx
@koxu444
dzisiaj, 17:36
czesc, czy jestes w stanie pomoc mi z tym kodem?
http://forum.4p[...]/Newbie/156859-masowe_wyszukanie_tekstu_w_wielu_komponentach_richtextbox
jestem poczatkujacy i juz łapie powoli wszystko , ale z tymi tablicami itd nie wiem jak poradzić sobie....
wiem że tam trzeba utworzyc tablice z zakresem 0-99 dla kazdego RichTextBoxa....ale jak dalej to przypisywać każdemu RichTextBoxowi liczbe to nie mam pojęcia.... bardzo bylbym wdzieczny jakbys mi pomogł...
niby jakies kody ktos w temacie napisał ale one nie działają ;/to co napisal _13_th_dragon byloby pewnie ok ale domyslam się że tam RichTextBoxList trzeba utworzyc... to pewnie nazwa tablicy? z gory dzieki za pomoc
(jezeli nie znasz VB to nawet w jakims C++ podpowiedz , zebym zobaczyl mniej wiecej jak to stosować)
ALERT!!! LEŃ DETECTED!!! CHCE GOTOWCA!!! ALERT!!!
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.