Eine Suchfunktion und mehrere Seiten

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Eine Suchfunktion und mehrere Seiten

    Hey Leute,

    Ich habe mir jetzt vorgenommen ein neues "Tool" zu schreiben.
    Leider fängt bei mir das Problem schon ganz Vorne an.
    Und zwar möchte ich mehrere Seiten haben d.h. ich Möchte auf Button1 klicken und dann soll label1 erscheinen und wenn ich dann auf Button2 drücke soll label1 verschwinden und label2 auftauchen.

    Dann bräuchte ich noch eine Suchfunktion! Ich habe zwar eine hier im Forum gefunden habe aber nichts verstanden also habe ich mir gedacht ich frag euch einfach mal.

    Hoffe ihr könnt mir helfen

    mfg.
    K4RTOFF3L
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Hallo, vielleicht hilft dir ja auch ein TabControl weiter!? Wenn du doch auf einzelne Controls setzt. Dann würde ich alles in eigene Panels setzen, so musst du nur für ein Control die, von StormySunshine genannte, Eigenschaft ändern. Falls du mit WPF arbeiten solltest, dort kann man für das TabControl einen Style schreiben, der die einzelnen Tabs nicht anzeigt, sodass man nur per CodeBehind den Tab wechseln kann. In WinForms geht das leider nicht.
    Was genau möchtest du denn mit der Suchfunktion finden?
    Also ".Visible" ist an sich schon mal ein Anfang!

    Bei 2 Seiten wäre es ok. Ich hab jetzt aber 12 Seiten. Und das heißt, wenn ich nicht falsch liege, dass ich eine endlos lange If-Abfrage machen müsste, damit das Programm weiß was es weg bzw. hin machen muss.

    Die Suchfunktion soll Sachen aus den Labels filtern. Damit meine ich, dass wenn ich z.B. "Hallo" eingebe, dann soll das Programm auf allen "Seiten" nach dem Wort "Hallo" suchen anzeigen wo es vorhanden ist
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Stimmt, eine elende lange if-Abfrage. Darum auch der Vorschlag mit den Tabs.
    Man kann sich den Code mit den Visible-Eigenschafts-Änderung auch etwas wegkürzen. Zuerst erstellst du eine Methode die alle Panels ausblendet. Diese rufst du in jedem Eventhandler auf. Danach blendest du das richtige Panel wieder ein.

    Zur Suchfunktion:
    Das finde ich relativ schwer zu implementieren, hier aber al eine Idee:
    1. Alle Controls durchgehen und ggf. die Kinder in einer Rekursiven Metrhode nauch durchgehen
    2. Danach prüfen ob ein gefundenes Control ein Label ist, von diesem kannst du dann den Text abfragen und vergleichen
    3. Diese Fundorte speicherst du in einer Liste und gibst sie am Ende aus. Du musst dir hierfür nur die Instanz des Controls merken. Denn mit Control.Show() o.ä. und ggf. einblenden des enthaltenden Panels kannst du das Control ziehmlich einfach sichtbar machen.
    Also das Thema mit den Seiten ist jetzt geklärt. Ich habe es geschafft meine Sachen zum funktionieren zu bringen.
    Jetzt ist nur noch das Thema mit der Suchfunktion... Ich verstehe gerade nicht wie man es machen soll trotz der Anleitung von Koopakiller

    @nafets3646
    Danke für das Angebot ,aber ich muss ablehnen!
    Es würde mir zwar sehr viel Arbeit und Gehirnzellen sparen, aber dafür kann ich es dann in einem anderen Projekt selber machen
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Mir war schon Klar, dass du die SuFu meinst ... Wenn du unbedingt willst kannst du es machen! Musst mir dann nur wenn du fertig bist die Sachen, die ich nicht verstehe, erklären
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Falls du mit WPF arbeiten solltest, dort kann man für das TabControl einen Style schreiben, der die einzelnen Tabs nicht anzeigt, sodass man nur per CodeBehind den Tab wechseln kann. In WinForms geht das leider nicht.


    Natürlich: TabControl ohne Reiter
    Mit freundlichen Grüßen,
    Thunderbolt
    @K4RTOFF3L
    Ich habs mal ausprobiert, so funktionierts und ist sogar noch ziemlich leicht verständlich ;):

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class SearchForm
    3. 'Unnötig, aber ist zum Testen sicher nicht schlecht ;)
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. FillLabelsWithRandomNumbers(Form1.Controls)
    6. End Sub
    7. Dim rand As New Random
    8. Private Sub FillLabelsWithRandomNumbers(ByRef controls As Control.ControlCollection) 'Das gleiche System wie bei SearchForControls...
    9. For Each c As Control In controls
    10. If c.Controls.Count <> 0 Then
    11. FillLabelsWithRandomNumbers(c.Controls)
    12. Else
    13. If TypeOf c Is Label Then
    14. DirectCast(c, Label).Text = rand.Next(0, 99999999).ToString
    15. End If
    16. End If
    17. Next
    18. End Sub
    19. Private Sub SearchForControlsWithMatchingText(ByVal controls As Control.ControlCollection, ByVal key As String, ByRef output As List(Of Label))
    20. For Each c As Control In controls 'Jedes einzelne Control durchgehen
    21. If c.Controls.Count <> 0 Then 'Wenn das Control ChildControls hat, dann noch in diesem suchen (-> Panel)
    22. SearchForControlsWithMatchingText(c.Controls, key, output)
    23. Else
    24. If TypeOf c Is Label AndAlso DirectCast(c, Label).Text.ToLower.Contains(key.ToLower) Then 'Wenn Typ=Label und der Text den key enthält
    25. MessageBox.Show(String.Format("Passendes Control gefunden: {0}, Text: {1}", DirectCast(c, Label).Name, DirectCast(c, Label).Text)) 'Messagebox mit Namen und Text des Labels
    26. output.Add(DirectCast(c, Label))
    27. End If
    28. End If
    29. Next
    30. End Sub
    31. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    32. Dim matchingcontrols As New List(Of Label) 'Hier sind nach ausführen der Search-Sub alle gefundenen Controls drin, die kannst du dann weiterverarbeiten
    33. SearchForControlsWithMatchingText(Form1.Controls, TextBox1.Text, matchingcontrols) 'Suchen
    34. End Sub
    35. End Class

    Button1 = Button zum zufälligen generieren von Namen
    TextBox1 = Textbox mit Suchbegriff
    Button2 = SuchButton
    Form1 = Form, in der gesucht wird
    Ok. Danke euch Beiden (Koopakiller und nafets3646).
    Ich werde mir morgen die Zwei Scripte mal anschauen und versuchen zu verstehen =)
    Im Moment bin ich nicht mehr in der Lage dazu =)
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    @K4RTOFF3L: Das sieht mir doch sehr nach TabControl ohne Reiter aus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!