Sign in to follow this  
Followers 0
ChrisL

OnEventMode Headache

3 posts in this topic

I have a function called _openDB() which has a default value of $db = -1

If $db = -1 then it opens up a fileOpenDialogue to select the file. If you call the function with a parameter it will open up the requested file.

If you call the function _openDB() with no parameter in the script all is fine.

However if you create a control to call the function it crashes and tells you the $db doesn't exist

Im using 3.2.8.1 and I've tried 3.2.9.5 and both give me the same result.

If you run the below code, it will open the FileOpenDialogue box but if you then click on the file menu item and do the same it crashes with

Variable used without being declared.:

If $db = -1 then

If ^ ERROR

Is this the correct behaviour?

Do I have to make a copy of the function which doesn't have a parameter to use with the onevent control?

Opt("GuiOnEventMode",1)

#include <GuiConstants.au3>

GuiCreate("MyGUI", 392, 204,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$FileMenu = GUICtrlCreateMenu("File")
$FileItem = GUICtrlCreateMenuItem("Open Database",$FileMenu)
GUICtrlSetOnEvent(-1,"_openDB")
GuiSetState()

_openDB()

While 1
    Sleep(10)
WEnd


Func _openDB($db = -1)

    If $db = -1 then 
        $db = FileOpenDialog("Test",@ScriptDir & "\_System","DataBase(*.db)")
        If @error then 
            Return
        EndIf
    EndIf
Msgbox(0,"","Opening file " & $db)

EndFunc

Share this post


Link to post
Share on other sites



@ChrisL

As far as remember the "Opt("GuiOnEventMode",1) mode accepts only NON Parameter functions.

Regards

ptrex

Thanks ptrex

I did some playing and found that if I declare the $db variable globaly I can use the function either way as long as I set $db back to -1 once I've finished with it.

Opt("GuiOnEventMode",1)

#include <GuiConstants.au3>

GuiCreate("MyGUI", 392, 204,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$FileMenu = GUICtrlCreateMenu("File")
$FileItem = GUICtrlCreateMenuItem("Open Database",$FileMenu)
GUICtrlSetOnEvent(-1,"_openDB")
GuiSetState()

Global $db = -1
_openDB()

While 1
    Sleep(10)
WEnd


Func _openDB($db = -1)
    If $db = -1 then 
        $db = FileOpenDialog("Test",@ScriptDir & "\_System","DataBase(*.db)")
        If @error then 
            Return
        EndIf
    EndIf
Msgbox(0,"","Opening file " & $db)
$db = -1
EndFunc

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0