Funktion wird ungewollt und wiederholt aufgerufen

  • Hey Leute,

    ich in dem Skript das ich gerade entwickle, wird eine Funktion immer wieder wie in einer schleife aufgerufen.

    Ein paar vorab Infos:
    Entwicklungsumgebung: SciTE 3.2.0
    OS: WINXP Pro
    AutoIt3Wrapper v.2.1.0.33

    Ich hab mal das gesamte Sktipt gepostet, damit ich nichts vergesse.
    Es dreht sich um die Funktion AddListview() (Beginn Zeile 409). Die Funktion wird in der Zeile 105 aufgerufen.

    Eigendlich sollten die Funktion erst ausgeführt werden, wenn der Button Hinzufügen (Der über die Funktion button() erstellt wird) gedrückt wird.
    Im Moment, wird die Funktion beim start des Skripts ununterbrochen aufgerufen und ich kann mich nicht erklären woran das liegt.

    Spoiler anzeigen
    [autoit]


    ;~ ###################################################################################################################################
    ;~ ###################################################################################################################################
    ;~ ## ##
    ;~ ## Skript Name: Haushaltsbuch.exe ##
    ;~ ## Author: Thorsten Zelt ##
    ;~ ## Erstell Datum: 05.01.2013 ##
    ;~ ## ##
    ;~ ## Funktion: Übersicht über die Privaten Finazen ##
    ;~ ## ##
    ;~ ## Erläuterungen: Navigation: ##
    ;~ ## Der Wert der Variable "$navigation_index" bestimmt, welcher Menü Punkt in der Navigation ausgewählt wurde. ##
    ;~ ## - Wert 0: Navigation ##
    ;~ ## - Wert 1: Ausgaben ##
    ;~ ## - Wert 2: Versicherung ##
    ;~ ## - Wert 3: Einnahmen ##
    ;~ ## - Wert 4: Statistik ##
    ;~ ## ##
    ;~ ## GUI Arrays: ##
    ;~ ## Um die größes des jeweiligen Arrays zu ändern, müssen 2 Variable angepasst werden. ##
    ;~ ## Bspl. Ausgaben: ##
    ;~ ## - $ausgabenSchleifenEnde +1 (Index beginnt bei 1) ##
    ;~ ## - Dim $ausgaben[] +1 (Index beginnt bei 0) ##
    ;~ ## Button (Hinzufügen, Löschen, Speichern): ##
    ;~ ## In der Funktion button() werden die Button erstellt, eingeblendet und aufgeblendet. ##
    ;~ ## Die Variabel $buttonHide bestimmt bestimmt ob die Buttons eingeblendet oder ausgeblendet werden. ##
    ;~ ## Wert 0: Buttons werden ausgeblendet ##
    ;~ ## Wert 1: Buttons werden eingeblendet ##
    ;~ ## ##
    ;~ ###################################################################################################################################
    ;~ ###################################################################################################################################

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

    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <GUIListView.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <TreeViewConstants.au3>
    #include <GuiStatusBar.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GUIEdit.au3>

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

    ;~ Variable deklarieren
    Global $menu_datei_schliessen
    Global $navigation_index, $StartStatus, $navigation_main, $navigation_main_ausgaben, $navigation_main_versicherungen, $navigation_main_einnahmen, $navigation_main_statistik
    Global $font, $komma, $eur
    Global $buttonHide, $buttonHinzufuegen
    Global $hallo

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

    ;Veariable werden gefüllt
    $font = "Arial"
    $komma = ","
    $eur = "€"

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

    ; Array für den Inhalt der GUIs
    Global $button, $buttonSchleifeEnde, $ausgabenSchleifenEnde
    Global $ListviewAusgaben

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

    $buttonSchleifeEnde = 2
    $ausgabenSchleifenEnde = 13
    $ListviewAusgabenUeberschrift = 4
    Dim $start[2]
    Dim $button[3]
    Dim $ausgaben[14]
    Dim $ListviewAusgabenUeberschrift[5]
    Dim $versicherungen[1]
    Dim $einnahmen[1]
    Dim $statistik[1]

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

    $ListviewAusgabenUeberschrift[0] = "Datum"
    $ListviewAusgabenUeberschrift[1] = "Laden"
    $ListviewAusgabenUeberschrift[2] = "Betrag"
    $ListviewAusgabenUeberschrift[3] = "Bezahlt mit"
    $ListviewAusgabenUeberschrift[4] = "Bereich"

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

    #Region ### START Koda GUI section ### Form=
    $main = GUICreate("Haushaltsbuch", 950, 700, 192, 114)
    menu()
    start()
    $Label1 = GUICtrlCreateLabel("Haushaltsbuch", 272, 10, 180, 28, $SS_CENTER)
    GUICtrlSetFont(-1, 18, 400, 0, $font)
    navigation()
    _GUICtrlStatusBar_Create($main)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $menu_datei_schliessen
    Exit
    Case $navigation_main
    main()
    Case $navigation_main_ausgaben
    ausgaben()
    Case $navigation_main_versicherungen
    versicherung()
    Case $navigation_main_einnahmen
    einnahmen()
    Case $navigation_main_statistik
    statistik()
    Case $buttonHinzufuegen
    AddListview()
    EndSwitch
    WEnd

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

    Func menu()
    Dim $menu_datei, $menu_extra
    $menu_datei = GUICtrlCreateMenu("Datei")
    $menu_datei_schliessen = GUICtrlCreateMenuItem("Beenden", $menu_datei)
    $menu_extra = GUICtrlCreateMenu("Extra")
    $menu_extra_aktualisieren = GUICtrlCreateMenuItem("Aktualisieren", $menu_extra)
    $menu_extra_optionen = GUICtrlCreateMenuItem("Optionen", $menu_extra)
    EndFunc

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

    Func navigation()
    Dim $navigation
    $navigation = GUICtrlCreateTreeView(6, 50, 126, 600, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    $navigation_main = GUICtrlCreateTreeViewItem("Navigation", $navigation)
    $navigation_main_ausgaben = GUICtrlCreateTreeViewItem("Ausgaben", $navigation_main)
    $navigation_main_versicherungen = GUICtrlCreateTreeViewItem("Versicherungen", $navigation_main)
    $navigation_main_einnahmen = GUICtrlCreateTreeViewItem("Einnahmen", $navigation_main)
    $navigation_main_statistik = GUICtrlCreateTreeViewItem("Statistik", $navigation_main)
    GUICtrlSetState($navigation_main, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
    EndFunc

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

    Func start()
    GUICtrlSetFont(10, 400, 0, $font)
    $navigation_index = 0
    $buttonHide = 0
    $Start[0] = "Guten Tag " & @UserName & "." & @CRLF & @CRLF _
    & "Vielen Dank das Sie sich für das Programm Haushaltsbuch entschieden haben." & @CRLF & @CRLF _
    & "Das Programm Haushaltsbuch, wurde für die Übersicht der Privaten Finanzen erstellt." _
    & @CRLF & "Das Haushaltsbuch wurde so einfach wie nur möglich gehalten. Es basiert auf der Einahmen Überschuss Rechnung." _
    & @CRLF & @CRLF _
    & @CRLF & "Sollten Sie mit dem Programm nicht zurecht kommen, wenden Sie sich an mich."
    $start[1] = GUICtrlCreateLabel($Start[0], 145, 50, 400, 400)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ######################### Beginn der Funktionen, die über die Navigation aufgerufen werden #############################
    ;~ ########################################################################################################################

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

    Func main()
    $buttonHide = 0
    button()
    Select
    Case $navigation_index = 1
    ;~ GUICtrlSetState($Ausgaben[0], $GUI_HIDE)
    VersteckeAusgabenItems()
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    EndSelect
    $navigation_index = 0
    EndFunc

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

    Func ausgaben()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    EndSelect
    $navigation_index = 1
    EndFunc

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

    Func versicherung()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    case $navigation_index = 1
    VersteckeAusgabenItems()
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 2
    EndFunc

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

    Func einnahmen()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 1
    VersteckeAusgabenItems()
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 3
    EndFunc

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

    Func statistik()
    $buttonHide = 0
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 1
    VersteckeAusgabenItems()
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 4
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ######################################### Ende der Navigations Funktionen ##############################################
    ;~ ########################################################################################################################

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

    ;~ ########################################################################################################################
    ;~ ####################### Beginn der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ################
    ;~ ########################################################################################################################

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

    Func button()
    Local $i
    If $navigation_index = "" Then
    If $button[0] = "" Then
    $button[0] = GUICtrlCreateButton("Hinzufügen", 860, 142, 82, 25)
    If $button[0] <> 0 Then
    GUICtrlSetState($button[0], $GUI_HIDE)
    $buttonHide = 1
    $buttonHinzufuegen = $button[0]
    EndIf
    EndIf
    IF $button[1] = "" Then
    $button[1] = GUICtrlCreateButton("Löschen", 860, 172, 82, 25)
    If $button[1] <> 0 Then
    GUICtrlSetState($button[1], $GUI_HIDE)
    EndIf
    EndIf
    If $button[2] = "" Then
    $button[2] = GUICtrlCreateButton("Speichern", 860, 625, 82, 25)
    If $button[2] <> 0 Then
    GUICtrlSetState($button[2], $GUI_HIDE)
    EndIf
    EndIf
    EndIf

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

    Select
    Case $buttonHide = 0
    For $i = 0 To $buttonSchleifeEnde Step 1
    GUICtrlSetState($button[$i], $GUI_HIDE)
    Next
    Case $buttonHide = 1
    If $buttonHide = 1 Then
    For $i = 0 To $buttonSchleifeEnde Step 1
    GUICtrlSetState($button[$i], $GUI_SHOW)
    Next
    EndIf
    EndSelect

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

    EndFunc

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

    Func ErstelleAusgabenItems()
    Local $i
    If $Ausgaben[0] = "" Then
    $Ausgaben[0] = GUICtrlCreateLabel("Ausgaben", 145,50,100,25)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Ausgaben[1] = GUICtrlCreateLabel("Datum", 165, 80, 60,15)
    $Ausgaben[2] = GUICtrlCreateDate("", 145, 98, 80, 20, $DTS_SHORTDATEFORMAT)
    $Ausgaben[3] = GUICtrlCreateLabel("Laden", 265, 80, 100, 15)
    $Ausgaben[4] = GUICtrlCreateCombo("", 230, 98, 100,20)
    $Ausgaben[5] = GUICtrlCreateLabel("Betrag", 345, 80, 50, 15)
    $Ausgaben[6] = GUICtrlCreateInput("", 335, 98, 25, 20, $ES_Number)
    $Ausgaben[7] = GUICtrlCreateLabel(",", 361, 107, 5, 22)
    $Ausgaben[8] = GUICtrlCreateInput("", 367, 98, 20, 20, $ES_Number)
    $Ausgaben[9] = GUICtrlCreateLabel($eur, 389, 101, 8, 20)
    $Ausgaben[10] = GUICtrlCreateLabel("Bezahlart", 420,80, 80, 15)
    $Ausgaben[11] = GUICtrlCreateCombo("", 402, 98, 100,20)
    $Ausgaben[12] = GUICtrlCreateLabel("Bereich", 530, 80, 80, 15)
    $Ausgaben[13] = GUICtrlCreateCombo("", 507,98, 100, 20)
    $ListviewAusgaben = GUICtrlCreateListView($ListviewAusgabenUeberschrift[0] & '|' & $ListviewAusgabenUeberschrift[1] & '|' & $ListviewAusgabenUeberschrift[2] & '|' & $ListviewAusgabenUeberschrift[3] & '|' & $ListviewAusgabenUeberschrift[4], 145, 123, 705, 482)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 0, 80)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 1, 200)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 2, 80)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 3, 145)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 4, 196)
    _GUICtrlListView_RegisterSortCallBack($ListviewAusgaben)

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

    Else
    For $i = 0 to $ausgabenSchleifenEnde Step 1
    GUICtrlSetState($Ausgaben[$i], $GUI_SHOW)
    Next
    GUICtrlSetState($ListviewAusgaben, $GUI_SHOW)
    EndIf
    EndFunc

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

    Func VersteckeAusgabenItems()
    Dim $i
    For $i = 0 to $ausgabenSchleifenEnde Step 1
    GUICtrlSetState($Ausgaben[$i], $GUI_HIDE)
    Next
    GUICtrlSetState($ListviewAusgaben, $GUI_HIDE)
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ####################### Ende der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ##################
    ;~ ########################################################################################################################

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

    ;~ ########################################################################################################################
    ;~ ############################### Anfang der Funktionen, um Die Listviews zu bearbeiten ##################################
    ;~ ########################################################################################################################

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

    Func AddListview()
    GUICtrlCreateLabel("test", 400,400,100,25)
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ################################ Ende der Funktionen, um Die Listviews zu bearbeiten ###################################
    ;~ ########################################################################################################################

    [/autoit]

    Wo liegt mein Fehler, und wie kann er behoben werden?

    Ich danke schon mal im vorraus für eure Hilfe!


    Gruß

    0cool

    Gut das fragen nichts kostet :)

    Einmal editiert, zuletzt von 0cool (8. Januar 2013 um 23:33)

  • Hallo, das Control erst in einer Funktion erstellen ist ungünstig.

    [autoit]


    Func AddListview()
    GUICtrlCreateLabel("test", 400,400,100,25)
    EndFunc

    [/autoit][autoit]


    ; schon erstelltes LabelControl in der GUI
    $myLabel = GUICtrlCreateLabel("", 400,400,100,25)

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

    Func AddListview()
    GUICtrlSetData($myLabel, "test")
    EndFunc

    [/autoit]
  • Der Fehler tritt auf wenn das entsprechende Control noch nicht erstellt ist aber schon geprüft wird ob es ein Event abgefeuert hat. Abhilfe vorher erstellen oder der globalen Variable einen Wert, der weder für Controls noch für EventIDs verwendet wird z.B. -9999, zuweisen.

    mfg autoBert