Buttons sortieren und Filtern

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Buttons sortieren und Filtern

    Hallo Liebe vb-paradise comunity,

    Ich habe ein Projekt erstellt mit einer Liste von Spielen. Wenn man auf einen Button klickt erscheint ein Fenster mit genauern Informationen.
    Ich möchte jetzt gerne die Buttons Filtern und nach bestimmten suchen. Wenn man jetzt in der "suchen" TextBox was eingegeben wird,
    sollen nur noch die Buttons angezeigt werden auf welchen die Eingabe mit dem Namen übereinstimmt. Hier mal ein paar Beispiele:

    <- Das ist die Spieleliste ohne Eingabe
    <- Das ist die Spieleliste mit "3" als eingabe; 3 befindet sich dort vorne in der nummer oder Hinten im Spielenamen

    <- Das ist die Spieleliste Mit der Eingabe "wo"

    Könnt ihr mir Helfen? Ich verzweifel daran Nach den Buttons zu suchen und die Buttons, die auf die Suche gefunden wurden, müssen ja dann neu auf der Form angeordnet werden.

    Ich bedanke mich schonmal für eure Hilfe :)

    Krogjan
    @Krogjan: Meinst Du so was:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For Each ctrl In Me.Controls
    3. If TypeOf (ctrl) Is Button Then
    4. Dim btn As Button = DirectCast(ctrl, Button)
    5. If btn.Text.Contains("3") Then
    6. btn.Visible = Not btn.Visible
    7. End If
    8. End If
    9. Next
    10. End Sub
    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!
    @LaMiy:

    Krogjan schrieb:

    sollen nur noch die Buttons angezeigt werden auf welchen die Eingabe mit dem Namen übereinstimmt.
    Von mir gibt es keine fertige Lösung, aber einen Denkanstoß, mit dem er sein Problem lösen kann. :D
    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!
    Das Problem lässt sich mit OOP wunderbar lösen. Erstelle Dir eine Klasse z. B. GameInfo. Gib dieser Klasse einen Button als Property, welchen Du dann einfach auf Deiner Form anzeigst. Weitere Properties könnten sein: GameName, GameDescription usw... Verwalte diese Instanzen von GameInfo dann in einer Liste, welche Du leicht filtern, sortieren und durchsuchen kannst. LINQ ist hier eine gute Möglichkeit.

    Eine weitere, noch komfortablere Möglichkeit, ist das ganze mit Hilfe von DataSet und DataGridView zu lösen. Da hier filtern, suchen und sortieren schon implementiert ist. Hier müsstest Du jedoch auf eine etwas abgewandelte Anzeige zurückgreifen. Aber mit einen DataGridView lässt sich vieles anstellen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    jo, strukturell gesehen ist das eine Datenverarbeitung, und wäre eine gute Möglichkeit, in diese Thematik einzusteigen.
    Mit Buttons erzeugen und Buttons wieder verschwinden lassen ist aber total der Holzweg-Ansatz.
    Vom Workflow her liesse sich das super-Einfach lösen mit Daten laden, speichern, verarbeiten - das sähe dann zwar nicht aus wie Buttons, und man würde auch nicht ständig neue Forms aufpoppen lassen, aber sein Job täte das schon.

    Um Buttons erscheinen zu lassen müssteman eine DatagridViewButtonColumn einbauen, und ansonsten das DGV auf "unsichtbar" stylen.
    Für das mit Forms aufpoppen müssteman fett in die Trickkiste greifen - siehe post#13 + #14 des gegebenen Links.

    RodFromGermany schrieb:

    @Krogjan: Meinst Du so was:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For Each ctrl In Me.Controls
    3. If TypeOf (ctrl) Is Button Then
    4. Dim btn As Button = DirectCast(ctrl, Button)
    5. If btn.Text.Contains("3") Then
    6. btn.Visible = Not btn.Visible
    7. End If
    8. End If
    9. Next
    10. End Sub

    Vielen Dank für deine Hilfe! :)
    Ich habe das ausprobiert und eingefügt und noch .contain(Textbox1) eingefügt da es wirklich in Textchanged rein soll. Wenn ich das nun ausprobiere passiert garnichts es werden keine Buttons "unsichtbar" gemacht. Muss man da noch was ändern fehlt da noch was? Sorry ich bin noch nicht so gut mit VB.
    @Krogjan: Mach Dir eine leere Form und füg dort 3 Standard-Buttons ein. Doppelklicke auf Button 1 und füge den Inhalt meiner Prozedur ein, ist ausprobiert. Klick dann mehrfach auf Button 1.
    Hast Du Deine Buttons richtig benannt?
    In welches Event hast Du meinen Code eingefügt?
    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!
    @RodFromGermany
    Den Code auf einen Button zu setzen funktioniert. Ich möchte das gerne in einem TextChanged event von einer Textbox benutzen und auch das funktioniert nach ausprobieren.
    Das funktioniert glaube ich nicht wenn sich die Buttons in einer Groupbox befinden, aufjedenfall passiert bei mir dann nichts. Kann der code auch irgendwie in einer Groupbox funktionieren?

    Krogjan schrieb:

    Kann der code auch irgendwie in einer Groupbox funktionieren?
    Den Button ist es egal, ob sie eich in einer GroupBox befinden. Signifikant ist das für RadioButton.
    Und Du kannsz mit GroupBoxX.Visible = False alle Controls darin unsichtbar machen.
    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!

    RodFromGermany schrieb:

    Krogjan schrieb:

    Kann der code auch irgendwie in einer Groupbox funktionieren?
    Den Button ist es egal, ob sie eich in einer GroupBox befinden. Signifikant ist das für RadioButton.
    Und Du kannsz mit GroupBoxX.Visible = False alle Controls darin unsichtbar machen.
    @RodFromGermany und alle Anderen :D
    Also bei mir funktioniert es nicht in einer GroupBox. Hier einen Kleinen Beweis ^^:

    http://www.youtube.com/watch?v=ERUgFuHKT2c

    Es ist eigentlich alles im Video gezeigt. Kann man das jetzt auch irgendwie in der Groupbox machen? :)

    Tschuldige wenn ich dich/euch nerve aber eine Frage wäre da noch ^^ Bei der Eingabe soll Groß und Kleinschreibung Ignoriert werden, weiß jemand da ne Lösung ?

    Aufjedenfall Danke schonmal für eure Hilfe!
    Mach doch einfach mal:

    VB.NET-Quellcode

    1. For Each ctrl In GroupBox1.Controls


    Wenn Du es schon auf diese Weise machen willst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Krogjan schrieb:

    weiß jemand da ne Lösung ?
    For Each ctrl In Me.Controls
    und
    For Each ctrl In Me.GroupBoxXyz.Controls
    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!
    @RodFromGermany und @SpaceyX

    Jo vielen Dank, das war die lösung :) Ich hatte da auch schon rumprobiert hatte das mit:

    VB.NET-Quellcode

    1. For Each ctrl In GroupBox1

    ausprobiert aber das .controls vergessen :pinch:

    Jetzt muss ich nur noch eine Lösung finden die Groß und Kleinschreibung zu ignorieren da das ja ein bisschen nervig ist immer genau auf die Richtige Groß und Kleinschreibung zu achten.
    Da sollte ToLower(), bzw. String.Compare weiterhelfen. Letztere hat in einer Überladung auch die IgnoreCase-Option.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    einfach die werte mit ".toUpper" oder ".toLower" vergleichen Damit hat man nur groß oder nur klein buchstaben
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich muss mich korrigieren, ich meinte nicht String.Compare, sondern die IndexOf-Funktion. Diese gibt Dir den Index des gesuchten Strings zurück. Also, wenn Ergebnis >-1 dann ist der gesuchte String im Ausgangsstring vorhanden. Nix für ungut. Ein Beispiel hierzu.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim s1 As String = "HUHU"
    3. Dim result = s1.IndexOf("u", StringComparison.InvariantCultureIgnoreCase)
    4. If result > -1 Then MessageBox.Show("String gefunden")
    5. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()