Dynamisches TreeViewItem mit Funktion belegen

  • hallo an alle,

    folgendes Problem:

    ich habe ein TreeView Controll welches durch diese Funktion dynamisch mit Items belegt wird

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    For $i=1 To $fileList[0]
    GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    Next
    EndIf
    EndFunc

    [/autoit]

    zu jedem programm in dem entsprechenden verzeichnis welches ich auslese gibt es ein ini file aus welchem ich wiederum infos in ein listview schreiben will

    ich arbeite mit dem oneventmodus und möchte nun, dass sobald eines der items angeklickt wird automatisch die entsprechenden infos aus der ini des entsprechenden verzeichnisses ins treeview geschrieben wird. hierzu brauche ich für die items eine entsprechende funktion, welche mir dann über das aktuell markierte treeviewitem die infos zieht und in das listview einträgt

    wie kann ich nun die im obigen scriptausschnitt angelegten items mit einer funktion belegen (funktion ist immer die gleiche). muss diese ja irgendwie über "itemclick" ansprechen...

    sorry wenn alles n bisschen verwirrend erklärt ist


    danke schonmal

    2 Mal editiert, zuletzt von oliverh (28. April 2009 um 14:06)

  • Habs selber geschafft *FREEEEEEEEUUUUUUUUUU*

    code:

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    Global $item[$fileList[0]]
    For $i=1 To $fileList[0]
    $item[$i-1]=GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    GUICtrlSetOnEvent($item[$i-1], "_getProgrammAndWriteInfos")
    Next
    EndIf
    EndFunc

    [/autoit]
  • Jetzt muss ich den Thread doch noch mal aufleben lassen...

    Will auf die TreeView Items noch jeweils ein Contextmenü mit entsprechendem menüitem und funktion legen... wie kann ich das machen?

    hier noch einmal duie funktion

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    Global $item[$fileList[0]]
    For $i=1 To $fileList[0]
    $item[$i-1]=GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    GUICtrlSetOnEvent($item[$i-1], "_getProgrammAndWriteInfos")
    Next
    EndIf
    EndFunc

    [/autoit]
  • hab es so versucht, allerdings öffnet sich kein contextmenü... kann mir denn niemand helfen????!?

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    Global $item[$fileList[0]]
    Global $contextMenue[$fileList[0]]
    Global $contextMenueItem[$fileList[0]]
    For $i=1 To $fileList[0]
    $item[$i-1]=GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    GUICtrlSetOnEvent($item[$i-1], "_getProgrammAndWriteInfos")
    GUICtrlCreateContextMenu($contextMenue[$i-1])
    $contextMenueItem[$i-1]=GUICtrlCreateMenuItem("Neue Version erzeugen", $contextMenue[$i-1])
    GUICtrlSetOnEvent($contextMenueItem[$i-1], "_test")
    Next
    EndIf
    EndFunc

    [/autoit]

    scheint wohl unlösbar zu sein...

  • nein geht auch anders, habs wieder selber hinbekommen... vielleicht auch interessant für euch andere :)

    [autoit]


    Func _readProgrammsAndWrite()
    _GUICtrlTreeView_DeleteAll($hTreeView)
    $fileList=_FileListToArray(@ScriptDir & "\Programme\", "*", 2)
    If @error=4 Then
    MsgBox(0, "Fehler", "Keine Programm im Programmverzeichnis gefunden")
    Else
    Global $item[$fileList[0]]
    Global $contextMenue[$fileList[0]]
    Global $contextMenueItem[$fileList[0]]
    For $i=1 To $fileList[0]
    $item[$i-1]=GUICtrlCreateTreeViewItem($fileList[$i], $hTreeView)
    GUICtrlSetOnEvent($item[$i-1], "_getProgrammAndWriteInfos")
    $contextMenue[$i-1]=GUICtrlCreateContextMenu($item[$i-1])
    $contextMenueItem[$i-1]=GUICtrlCreateMenuItem("Neue Version erzeugen", $contextMenue[$i-1])
    GUICtrlSetOnEvent($contextMenueItem[$i-1], "_createNewVersionFromLast")
    Next
    EndIf
    EndFunc

    [/autoit]
  • Hallo OiverH,

    ich weiss ja nicht warum es ein globales für den Treeview nicht tut so wie es Oscar vogeschlagen hat. Für mich sieht es in deiner Lösung so aus, als wenn du eh immer die gleiche Function benutzt, also warum nicht gleich Oscars Vorgschlag? Ein Contextmenü für den ganzen TreeView, du kannst ja dort abfragen welches TreeViewItem gerade selected ist und dem entsprechend reagieren.
    Bei deiner Lösung solltest du auch alle bereits erstellten Menüs und MenüsItems wieder löschen, bevor du neue erstellst, sonst geht dein Rechner irgendwann in die Knie, vor lauter veschwendeten Ressourcen,

    mfg (Auto)Bert

  • das problem ist dann aber, dass ich auch ein contextmenü bekomme wenn ih irgendwo auf die treeview nen rechtsklick mache oder? das fände ich dann eher unschön...

    wie kann ich denn menüs und items wieder löschen? bräuchte das für die listview. in der treeview ändert sich ja nichts...

  • Hallo Oliverh,

    so:

    Zitat

    Auszug aus dt. HilfeGUICtrlDelete
    --------------------------------------------------------------------------------

    Löscht ein Steuerelement.


    GUICtrlDelete ( controlID )

    ,

    mfg (Auto)Bert

  • dazu müsste ich aber die zum item gehörende menü-ID irgendwie herausfinden, da ich außerhalb der funktion wo die menüs und menüitems erezugt werden, ja gar keinen zugriff mehr auf diese handles hab...

    hat wer ne idee?

    bräuchte hierzu ne funktion die mir zu nem item oder control das entsprechende handle zu dem dazugehörenden menü ermittelt... wenn ichs dann richtig machen will, brauch ich das gleiche dann auch noch für die menüitems...

  • welches wie groß sein soll??? weiß ja letzendlich nicht wieviele menüs, menüitems erstellt werden...