Prob mit Switch Cases zu MenuItems im ContextMenu - dynamisch

  • Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.2.0
    Author: Karill Endusa

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Kundendatenbank für kleine bis mittelgroße Geschäfte.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    ;[includes]
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <SQLite.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------Variables-------------------------Start
    ;=> Globale Deklarationen verschoben in die For Schleifen der entsprechenden Abschnitte (ListView, LVMenu)
    ;----------------------------------------Variables---------------------------End

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------GUI-------------------------------Start
    $GUI_mainWindow = GUICreate("Kundendatenbank", 1000, 750, -1, -1)

    [/autoit] [autoit][/autoit] [autoit]

    ;------Ini-------Start
    If FileExists(@ScriptDir&"\kudaba\") = 0 Then
    DirCreate(@ScriptDir&"\kudaba\")
    EndIf
    If FileExists(@ScriptDir&"\kudaba\structure.ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner1", "Ordner1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner2", "Ordner2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen", "Ordner3", "Ordner3")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner1", "1")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner2", "2")
    IniWrite(@ScriptDir&"\kudaba\structure.ini", "Ordnerorder", "Ordner3", "3")
    EndIf
    ;------Ini---------End

    [/autoit] [autoit][/autoit] [autoit]

    ;------Menu------Start
    $M_datei = GUICtrlCreateMenu("Datei")
    $MI_beenden = GUICtrlCreateMenuItem("Beenden", $M_datei)
    ;------Menu--------End

    [/autoit] [autoit][/autoit] [autoit]

    ;-----ListView---Start
    GUICtrlCreateGroup("Kunden", 5, 0, 160, 330)
    $TreeView = GUICtrlCreateTreeView(10, 20, 150, 300, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    Global $IRS_structure_ONamen = IniReadSection(@ScriptDir&"\kudaba\structure.ini", "Ordnernamen")
    Global $TV_O[$IRS_structure_ONamen[0][0]]
    Global $CM_TV_O[$IRS_structure_ONamen[0][0]]
    Global $CM_TV_O_rename[$IRS_structure_ONamen[0][0]]
    For $i = 0 To $IRS_structure_ONamen[0][0]-1
    $TV_O[$i] = GUICtrlCreateTreeViewItem($IRS_structure_ONamen[$i+1][1], $TreeView)
    $CM_TV_O[$i] = GUICtrlCreateContextMenu($TV_O[$i])
    $CM_TV_O_rename[$i] = GUICtrlCreateMenuItem("Umbenennen", $CM_TV_O[$i])
    If FileExists(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini") = 0 Then
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Name", "Mustermann")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Forename", "Max")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "StreetAndNumber", "Weißwurststraße 1337")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "PLZ", "99999")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Ort", "Musterhausen")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Tel", "12345/6788")
    IniWrite(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde1", "Fax", "12345/6789")
    EndIf
    Global $IRS_KundenO = IniReadSectionNames(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini")
    Global $TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    Global $CM_TV_K_details[$IRS_structure_ONamen[0][0]][$IRS_KundenO[0]]
    For $x = 0 To $IRS_KundenO[0]-1
    IniReadSection(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1)
    $name = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Name", "not found")
    $forename = IniRead(@ScriptDir&"\kudaba\Ordner"&$i+1&".ini", "Kunde"&$x+1, "Forename", "not found")
    $TV_K[$i][$x] = GUICtrlCreateTreeViewItem($name&", "&$forename, $TV_O[$i])
    ;-----LVMenu-----Start
    $CM_TV_K[$i][$x] = GUICtrlCreateContextMenu($TV_K[$i][$x])
    $CM_TV_K_details[$i][$x] = GUICtrlCreateMenuItem("Detailansicht", $CM_TV_K[$i][$x])
    ;-----LVMenu-------End
    Next
    Next
    ;-----ListView-----End

    [/autoit] [autoit][/autoit] [autoit]

    ;-----LVMenu-----Start
    ;=> Verschoben in die 2. For Schleife des ListView Bereichs
    ;-----LVMenu-------End

    [/autoit] [autoit][/autoit] [autoit]

    ;-----StatusBar--Start
    $StatusBar1 = _GUICtrlStatusBar_Create($GUI_mainWindow)
    _GUICtrlStatusBar_SetSimple($StatusBar1)
    _GUICtrlStatusBar_SetText($StatusBar1, "Kundendatenbank Version 1.0.0 (by Martin Bucher)")
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 20)
    ;-----StatusBar----End

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $GUI_mainWindow)

    [/autoit] [autoit][/autoit] [autoit]

    ;//TODO
    $GUI_detailWindow = GUICreate("Detailansicht", 750, 500, -1, -1)
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    ;----------------------------------------GUI---------------------------------End

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------Script----------------------------Start
    While 1 * Sleep(10)
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    If $nMsg[1] = $GUI_mainWindow Then
    Exit
    ElseIf $nMsg[1] = $GUI_detailWindow Then
    GUISetState(@SW_HIDE, $GUI_detailWindow)
    EndIf
    Case $MI_beenden
    Exit
    Case $CM_TV_O_rename[0] To $CM_TV_O_rename[2]
    MsgBox(0, "", "Case works!");[TODO]
    EndSwitch
    WEnd
    ;----------------------------------------Script------------------------------End

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------Functions-------------------------Start

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------Functions---------------------------End

    [/autoit]

    Mein Problem is im Switch
    im Case $CM_TV_O_rename[0] To $CM_TV_O_rename[2]
    also an sich klappt das... nur wenn ich auf alle TreeView Items zwischen denen wo das Menü dazu da is klicke kommt immer die MsgBox und das nervt einfach
    Die nachricht soll nur kommen wenn ich auf den menuitem klicke...
    so wie es jetz aussieht könnte man auch einfach jeden case einzeln abfragen aber eigentlich siehts auch anders aus:
    Case $CM_TV_O_rename[0] To $CM_TV_O_rename[$IRS_structure_ONamen[0][0]-1]
    heisst die ausgabe is dynamisch und ich glaube kaum dass ich cases vom switch in ne for schleife packen kann oder? 8|

    3 Mal editiert, zuletzt von Karill Endusa (15. Januar 2010 um 16:48)

  • ohne mich jetzt groß mit deinem script zu beschäftigen.

    du gehst anscheinend so vor:
    1. Treeviewitem
    1.1. Treeviewunteritem
    2. Treeviewitem
    2.1 Treeviewunteritem
    3. Treeviewitem
    3.1 Treeviewunteritem

    von den id's sieht das dann zum Beispiel so aus
    1. ID 5
    1.1. ID 6
    2. ID 7
    2.1. ID 8
    3. ID 9
    3.1. ID 10

    und wenn du schreibst 6 to 10, dann macht er natürlich 6,7,8 ,9 ,10

    du muss also erst alle Treeviewitems erstellen und dann die unteritems dazu, dann hast du fortlaufende ID's


    Aufwendigere Lösung:
    OnEventModus, ich mag ihn sehr gerne, is aber wahrscheinlich bisschen arbeit das umzuschreiben

  • damn danke ich hab gar nich dran gedacht dass man das ja in ID's umdenken muss... da haste natürlich recht ich dachte er springt da nur auf die variablen an xD

    ne der compiler hat leider keine künstliche intellegenz. :D

    wär schon geil, aber dann würden sich alle programme ja von selber schreiben :D

  • Mir würde es schon reichen, wenn ich mir Matrix-Like ein Kabel in den Nacken stecke, und so programmieren könnte. :rock:

    *g* aber wenndann ganz stylisch nur mit nullen und einsen

    01000100011000010111001100100000011101111110010001110010001000000110011101100101011010010110110000100001