Seite 1 von 1

TreeGadget Probleme

Verfasst: 05.11.2004 20:32
von supermario
Hi,

das erstellen eines TreeGadgets samt Nodes klappt bei mir problemlos, aber wenn ich im Programmverlauf Nodes öffne und Items eintrage, kommt das System durcheinander und schreibt die Items in die Rootnode. Hat jemand von Euch ein Sample, in dem dynamisch mit den TreeNodes gearbeitet wird, also die Nodes mehrmals im Programmverlauf geöffnet und geschlossen werden?

Besten Dank,
SUPERMARIO :freak:

Verfasst: 05.11.2004 20:59
von Ynnus
Du musst bei der Position in AddGadgetItem(#Gadget, Position, Text$ [, ImageID]) auch den gewünschten Knoten bei "Position" eintragen. Bleibt es bei -1 wird der Eintrag am Ende ganz unten rein gesetzt. Wenn das so nicht geht, versuch es mal mit "OpenTreeGadgetNode()" und öffne zuerst die Stelle wo das neue Objekt rein soll, vielleicht geht's dann.

Und Beispiele solltest du eigentlich im CodeArchiv finden (zu downloaden auf purearea.net). ;)

Verfasst: 05.11.2004 23:10
von supermario
ich sehe die Listings im purearea.net gerade durch, vielleicht finde ich ja noch was. Hier ist mein Listing. Das wiederöffnen klappt dort nicht, wenn die Node bereits geschlossen wurde. Vielleicht nur ein dummer Programmierfehler?

Code: Alles auswählen

; PureBasic Visual Designer v3.90 build 1360

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Tree_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      TreeGadget(#Tree_0, 35, 50, 200, 210)
        AddGadgetItem(#Tree_0, -1, "Eintrag 1")
        AddGadgetItem(#Tree_0, -1, "Eintrag 2")
        AddGadgetItem(#Tree_0, -1, "Knoten 1")
        OpenTreeGadgetNode(#Tree_0, -1)
          AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 1")   
          AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 2")
          AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 3")   
        CloseTreeGadgetNode(#Tree_0)                                  
        AddGadgetItem(#Tree_0, -1, "Eintrag 3")                
        AddGadgetItem(#Tree_0, -1, "Knoten 2")
        OpenTreeGadgetNode(#Tree_0, -1)
          AddGadgetItem(#Tree_0, -1, "Knoten 2 Eintrag 1")   
          AddGadgetItem(#Tree_0, -1, "Knoten 2 Eintrag 2")
          AddGadgetItem(#Tree_0, -1, "Knoten 2 Eintrag 3")   
        CloseTreeGadgetNode(#Tree_0)  
        AddGadgetItem(#Tree_0, -1, "Eintrag 4")   
    EndIf

;---HIER
    ;Knoten 1 wieder öffnen..
    OpenTreeGadgetNode(#Tree_0, 2)
      AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 4")   
      AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 5")
      AddGadgetItem(#Tree_0, -1, "Knoten 1 Eintrag 6")   
    CloseTreeGadgetNode(#Tree_0)
;---BIS HIER

  EndIf
EndProcedure


Open_Window_0()

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    
    ;Debug "WindowID: " + Str(EventWindowID())
    
    GadgetID = EventGadgetID()
    
    If GadgetID = #Tree_0
      Debug "GadgetID: #Tree_0 Position:"+Str(GetGadgetState(#Tree_0))
      
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

End
[EDIT Danilo] Code-Tags gesetzt

Verfasst: 06.11.2004 14:40
von Mischa

Code: Alles auswählen

AddGadgetItem(#Gadget, -1, "text")
erstellt am ENDE der entsprechenden Liste die Einträge.
Bei nachträglichem 'Einfügen' mußt Du schon etwas
konkreter adressieren. :wink:

Code: Alles auswählen

    OpenTreeGadgetNode(#Tree_0, 2)     
      count=CountTreeGadgetNodeItems(#Tree_0, 2)
      AddGadgetItem(#Tree_0, 2 + count + 1, "Knoten 1 Eintrag 4")    
      AddGadgetItem(#Tree_0, 2 + count + 2, "Knoten 1 Eintrag 5") 
      AddGadgetItem(#Tree_0, 2 + count + 3, "Knoten 1 Eintrag 6")    
    CloseTreeGadgetNode(#Tree_0)

Gruß,
Mischa

Verfasst: 07.11.2004 16:18
von supermario
danke, sehr freundlich :oops:

Gruß
SUPERMARIO