TreeView - Probleme / Planlos beim Befüllen

  • Hey,

    ihr kennt doch sicher auch die Problematik mit Müttern, die einem das Leben so richtig schwer machen können?!
    Meine stellte mich vor die Herausforderung, ein FahrtenbuchTool für sie zu erschaffen. Damit liegt sie mir auch ganz schön in den Ohren.
    Ja, was tut man nicht alles, um seiner Mami das Leben ein wenig zu erleichtern.... :saint:

    Damit bin ich auch schon recht gut voran gekommen. _GoogleMaps.au3 sei Dank :thumbup:
    Fahrtenbücher werden erfolgreich angelegt, Kundenstamm kann bearbeitet werden (falls einer umzieht oder neue hinzu kommen), Routenberechnung anhand der Kundendaten usw...

    Nun stehe ich aber vor einem Problem, bei dem ich nicht mehr weiss, wie ich das umsetzen soll. Vermutlich weil ich dazu nicht clever genug bin, oder weil ich das viel zu kompliziert versuche.
    Es geht um die Darstellung der Fahrtenbücher innerhalb des Tools. Ich möchte die Daten in einer TreeView darstellen in folgender Aufteilung:


    Das mit den Jahren und Monaten kriege ich noch selber gebacken, ABER die Tage... die machen mich fertig! :cursing:

    Das komplette Script kann ich kaum posten, da ich darin auch mit eigenen Includes arbeite und auch mit einer Verzeichnisstruktur, die bei euch nicht gegeben sein wird.
    Darum habe ich ein kleines Beispiel zurecht geschustert. Ein GUI mit 2 TreeViews. Links ist die TreeView, die ich erstelle und rechts ist ein Beispiel, so wie es aussehen soll.

    lauffähiges Scriptbeispiel

    Das Problem ist, dass ich nicht weiss, wie ich die subitems der Tage den subitems der Monate zuordnen soll.
    Kann mir jemand weiterhelfen?

    MfG, Lo..

  • Hab die Funktion abgeändert:

    Das funktioniert, solange die Daten in dem bekommenen Array sortiert sind (Tage im Monat), denke das ist der Fall, da das auch bei deinen Arrays stimmt. Falls nicht musst du dort noch mit einem Array arbeiten.
    Ich hoffe, ich konnte dir weiterhelfen :)

    • Offizieller Beitrag

    Ich würde es so machen:

    Spoiler anzeigen
  • Ich muss mich dafür entschuldigen, dass ich mich ungenügend ausgedrückt habe! Dafür ärgere ich mich sehr über mich selbst.
    Beim Verfassen des Threads habe ich nicht weit genug voraus gedacht und nur 1 von 2 Probleme erwähnt. Bis zum 2. Problem bin ich allerdings selbst noch nicht gekommen...

    Mittlerweile kann ich durch die Hilfe von @Oscar und @Kanashius nun auch die Tage im TreeView sehen.
    Leider reicht das noch nicht aus. In der While-Schleife, die das GUI (wieso will ich immer DIE GUI schreiben?!) "am Leben hällt", benötige ich die Handles der TreeViewItems,
    damit ich bei Klick auf diese die Werte benutzen kann um weiter arbeiten zu können.

    Ich weiss, dass sich das nicht gehört und gar nicht gerne gesehen wird. Ich fühl mich grad wie ein "Nimm mir mal ganz schnell den Arm aus der Sonne Typ".
    Könnt ihr mir sagen, wie:
    - ich es anstellen muss, dass ich die erstellten TVItems in die While-Schleife eintragen muss?
    (das sollte ich dann selber hinbekommen: - ich bei Klick auf ein TVItem den Text des gewählten items und den Text des zugehörigen Parents bekomme?)

    • Offizieller Beitrag

    Beim Treeview ist das auslesen nicht so ganz einfach. Bei einem meiner Scripte habe ich ziemlich lange gebraucht, bis ich eine funktionierende (und relativ einfache) Lösung gefunden habe.
    Ich habe Dir das mal in Dein Script eingebaut:

    Spoiler anzeigen
  • Hi,

    in linker TV Item anklicken und dann den Button unten

    //EDIT
    gibt den Dateinamen zurück, sobald ein Tag selektiert wurde

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (7. Juni 2015 um 11:58)

  • Vielen Dank nochmals!!!

    Beide Varianten funktionieren prima. Hab mich aber für Oscars Variante entschieden, weil dort kein extra Button geklickt werden muss.
    Damit ich mit den ermittelten Daten (Jahr|Monat|Tag) aus WM_Notify() weiter arbeiten kann, habe ich die Daten innerhalb WM_Notify() an eine andere Funktion übergeben.
    Funktioniert prima.

    Jetzt hab ich dazu nur noch eine kleine Frage. Wenn ich nun in der anderen Funktion, an der ich die Daten übergeben habe, ODER an der Stelle in WM_Notify(), wo ich die Daten übergebe,
    ein _ArrayDisplay() anwenden will, hängt sich das Script auf. (Ich kann aber mit den Arrays weiter arbeiten, indem ich die Arrays direkt anspreche. Dann bricht es nicht ab.)

    Warum ist das so?

  • Das liegt daran, das du in einem Event bist. In Events darf _ArrayDisplay() nicht genutzt werden!
    Ich vermute, das liegt daran, dass ein Fenster erstellt wird und dieses auf Events wartet. Bist du aber noch in der Eventfunktion ($GUI_RUNMSG steht ja auch oft am ende), wird dieses blockiert->er kann diese Events nicht verarbeiten, und das programm hängt.

    • Offizieller Beitrag

    Hab nicht gewusst, dass _ArrayDisplay() auch auf ein Event wartet.

    Das hast du falsch verstanden. _ArrayDisplay pausiert den Code. Somit entsteht in der registrierten Funktion ein nicht definierter Zustand.
    Daher der Hinweis, innerhalb dieser Msg-auswertenden Funktion niemals User-Interaktionen durchführen. Neben Input- und Messagebox zählt auch _ArrayDisplay zu den User-Interaktionen.

  • Ich hab das _ArrayDisplay() lediglich benutzen wollen um zu sehen, welche Daten ich nun tatsächlich zurück bekomme.

    Dann setz das ArrayDisplay() irgendwo in deine Endlos-Schleife...
    Oder benutze ConsoleWrite() 8)

  • Hi Andy,

    letztendlich hab ich das auch mit ConsoleWrite() erledigt. Schliesslich hat es beim Script von Oscar ja auch funktioniert.
    Jetzt allerdings ist mir aufgefallen, dass ich dem Programm noch etwas hinzu fügen sollte. Nämlich wie lang meine Ma bei dem Kunden gebraucht hat. Sieht nicht nur im Fahrtenbuch besser aus,
    sondern ist auch für die geplante Rechnungsschreiberei unerlässlich! Dazu muss ich etliche Funktionen umschreiben. Ne ganze Menge an Arbeit, die da noch auf mich zu kommen wird.

    Und ich weiss schon jetzt, an welcher Stelle ich wieder Unterstützung von euch brauchen werde: Daten aus dem GUI auf Papier bringen...
    Das werd ich brauchen um das Fahrtenbuch sowie die Rechnungen auszudrucken. Aber so weit bin ich noch nicht. Wird dann auch ein neuer Thread werden.

    Also bis demnächst :)

    MfG Lo..

  • Hi,

    was hastn du für ne Mutter?

    Meine nervt immer nur, wenn das WLAN am Tablet nicht funktioniert (aus->an->fixed) oder wieso jetz WhatsApp sendet, aber der andere es nicht empfängt/liest (weil ja die Haken nicht blau werden) ;)

    Wäre auch gerne etwas gefordert, aber da fehlt von der anderen Seite leider der "Plan" :D

    Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.