Nur Labels zählen die einen bestimmten inhalt haben.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Nur Labels zählen die einen bestimmten inhalt haben.

    Hallo zusammen.

    Ich würde gerne die Labels in einem TabControl die mit einem bestimmten Inhalt gefüllt sind zählen und die Anzahl dann in einem Label in einem anderen TabControl ausgeben. Es soll einmal der Wert "online" gezählt werden und einmal der Wert "offline".

    Wie kann ich sowas machen? Meine suche ergab bisher leider keine Treffer.


    Gruß Michael
    Als 1. Gib deiner Projektmappe Option Strict On.
    Sieht als als ob Du alle Daten in Controls lagers und damit weiterarbeiten möchtest.
    (Verdammt hat ma wer den guten Option Strict On Artikel zur Hand? Hab den Link verloren lol).

    Das was Du vorhast würde z. B. so gehen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For each Child As Label in TabControl.TapPageXY.Controls.OfTyp(Label)
    2. If Child.Text = "Online" Then
    3. Anzahl += 1
    4. End If
    5. Next Child


    Aber ich bezweifle stark das dies der richtige weg ist!
    Was hast Du vor?
    Lässt Du die Status von z.B. Servern in Labels ausgeben und möchtest dann dessen Anzahl ausgeben?

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Eistee“ ()

    Danke für die Antwort Eistee

    Ich verstehe nur nicht wie ich den Code von Die einbauen soll.

    Ich habe mir eine Server überwachung geschrieben. Nun muß ich das ja so machen das er mir auf den einzelnen Tabpages die ich festlegen muss mir dann dort immer die Online und offline labes zusammen zählt. Der Text bzw. Wert der labes wird mit folgenden Code geschrieben.

    VB.NET-Quellcode

    1. Try
    2. client1.Connect("IP", PORT)
    3. Label7.Text = ("Online")
    4. Label7.BackColor = Color.Green
    5. Label7.ForeColor = Color.Black
    6. Catch ex As Exception
    7. Label7.Text = ("Offline")
    8. Label7.BackColor = Color.Red
    9. Label7.ForeColor = Color.Blue
    10. End Try


    Ich hoffe ich konnte mich so ausdrücken das man versteht was ich vorhabe.


    Gruß Michael
    Das mit dem: Try client1.Connect("IP", PORT) kann man so machen.
    Nur würde ich dannach versuchen die Daten on der GUI zu trennen.
    Soll heißen, das Ergebnis des Connect versuchs, wird in einer Variabel gespeichert und im anschluss wird der Wert aus der Variabel in einem deiner Labels angezeigt.

    Server Testen (Try connect) -> Status Offline oder Online in Vartiabel speichern (z. B. vom Typ Boolean) -> Den Status der Variabel hier True oder False (wegen dem Typ Boolean) im Label anzeigen True = "Online" und False = "Offline".
    Zählen kannst Du deine Server dann indem Du die Anzahl der Offline Server zusammenzählst.

    Das ganze geht mit einem Array oder einer List (Of Type) welches ich in verbindung mit einer Strucktur nutzen würde.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Structure Server
    3. IP As String
    4. Port As Integer
    5. Online As Boolean
    6. End Structure
    7. Private ServerListe As List Of (Server)
    8. Private Server_01 As Server
    9. Private Server_02 As Server
    10. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    11. Server_01.IP = "192.168.0.1"
    12. Server_01.Port = "2832"
    13. Server_01.Online = OnlineTest()
    14. ServerListe.Add(Server_01)
    15. Server_02.IP = "192.168.0.1"
    16. Server_02.Port = "2832"
    17. Server_02.Online = OnlineTest()
    18. ServerListe.Add(Server_02)
    19. End Sub
    20. Function OnlineTest(ByVal MyServer As Server) As Bloolean
    21. Try
    22. client1.Connect(MyServer.IP, MyServer.PORT)
    23. return True;
    24. Catch ex As Exception
    25. return False
    26. End Try
    27. End Function
    28. End Class


    Zählen kannst Du deine Server dann mit einer Schleife wo Du alle Items der ServerListe durchgest und auf Online Checkst.
    Oder Du legst dir 2 Listen an ServerOnline und ServerOfline, wo Du dann die Server erst Nach dem Online Test jeweils in die richtige Liste steckst.

    Edit2: Was jetzt noch fehlt ist das Anzeigen der Daten in Labels:

    VB.NET-Quellcode

    1. Label.text = If(ServerListe(0).Online, "Online", "Offline")
    2. Label.BackColor = If(ServerListe(0).Online, Color.Green, Color.Red)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Eistee“ ()

    Hallo Eistee

    Danke für die Antwort aber ich verstehe das nicht ganz wie und was ich machen soll.

    Ich habe erst mit VB angefagen und steige da noch nicht ganz so durch.

    Kannst Du mir mal ein Beispiel machen wie es ausehen könnte wie das mit dem zählen und dem Status machen kann?


    gruß michael
    Beispiel steht oben, ob es jetzt die Beste möglichkeit ist bin ich mir nicht sicher ^^
    ABER es ist aufjedenfall besser als die eigentlichen Daten in Controls zu speichern und nur noch damit zu arbeiten.

    Edit: Habe oben noch mal etwas hinzugefügt.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Eistee“ ()

    Blacky1980 schrieb:

    Ich verstehe nur nicht wie ich den Code von Die einbauen soll.

    Blacky1980 schrieb:

    Ich habe erst mit VB angefagen und steige da noch nicht ganz so durch.
    Wird das der neue Thread: Wer macht mir meine Hausaufgaben am schnellsten?
    -----
    @Blacky1980:: Wo bleibt Deine Eigeninitiative?
    Lies Dir einfach mal ein paar einfache Threads durch und vollzieh die Lösung nach. Danach solltest Du in der Lage sein, einen Zweizeiler richtig in Dein Programm zu integrieren.
    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!
    Hallo zusammen.

    Ich habe das mit dem Code von Eistee versucht aber ich bekomme dort eine Fehlermeldung nach der anderen.
    Ich habe echt alles versucht aber ich bekomme es einfach nicht zum laufen.


    Gibt es den nicht eine einfache Lösung um bestimmte Labels zu zählen wieviele mit dem Wert online und wieviele mit dem Wert offline sind.


    Gruß Michael

    Blacky1980 schrieb:

    aber ich bekomme dort eine Fehlermeldung nach der anderen.
    Welche Fehler in welcher Zeile?
    Hast Du Option Strict On?
    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 ist, dass der Weg über die Labels der Falsche ist. Stell dir vor du baust ein Haus und gleich nachdem alle Mauern stehen willst du Möbel reinstellen. Was sollte der Fliesenleger dir raten:
    1) kein Problem, dann heben wir die Möbel einfach an und ich leg schnell die paar Fliesen drunter! #YOLO #BesdeLeben
    2) So nicht! Eins nach dem Anderen.

    Hier ist es genauso.
    1) Wir zeigen dir wie man das mit Labeln hinbastelt und du machst immer so weiter. Folgen sind: schlechter, unwartbarer, unübersichtlicher, nicht erweiterbarer Code. Außerdem schreibst du dir die Finger wund - wenn man ständig ähnlichen Code schreibt ist das ein Zeichen, dass etwas falsch läuft.

    2) Wir sagen Stop, lerne erst die Grundlagen, fange 'kleiner' an (Server/Client-Anwendungen sind immer kompliziert und haben ein gewisses Eigenleben). Wenn du etwas von Klassen, Listen, OOP, Methoden, Option Strict On, Events, Datentypen, Vererbung etc verstanden hast kannst du dein Programm elegant mit wenigen Zeilen lösen. Nicht nur das: Du kannst es auch erweitern, warten und überblicken. Eine simple Abfrage "wie viele Clients sind grade Online?" könnte so gelöst werden:

    VB.NET-Quellcode

    1. Public Function CountOnlineClients as Integer
    2. dim count as Integer = 0
    3. For each client in ClientListe
    4. if client.Status = eStatus.Online 'Offline, Beschäftigt, usw wären denkbar
    5. count +=1
    6. end if
    7. next
    8. return count
    9. End Function


    Du siehst: GUI und Daten trennen lohnt sich. Du hast ein paar Klassen und kannst damit gut leserlichen Code erstellen - und die Labels fallen aus der Programmlogik raus, denn die GUI wird nur zum Anzeigen/Ansteuern der Programmlogik genutzt.