EventHandler problem
- To: mathgroup at smc.vnet.net
- Subject: [mg88632] EventHandler problem
- From: "J. McKenzie Alexander" <jalex at lse.ac.uk>
- Date: Sat, 10 May 2008 06:53:47 -0400 (EDT)
I'm trying to design a custom InputField that indicates whether or not
the user has pressed Return to submit the changes. It's a simple
design: a red or green disk is drawn to the right of the InputField to
indicate the state.
Here's the definition of the disks:
red = Graphics[{Green, AbsolutePointSize[12], Point[{0, 0}]},
ImageSize -> {20, Automatic}]
green = Graphics[{Green, AbsolutePointSize[12], Point[{0, 0}]},
ImageSize -> {20, Automatic}]
Here's my first attempt at creating the InputField:
DynamicModule[{k = 1, changed = False},
Row[{
EventHandler[
InputField[Dynamic[k], Number, FieldSize -> Tiny,
ContinuousAction -> True],
{"KeyDown" :> (changed = True),
"ReturnKeyDown" :> (changed = False)
},
PassEventsDown -> True
],
Dynamic[If[changed, red, green]]
}]
]
Everything works except setting the value of changed back to False
when the Return key is pressed. Mathematica fires the action for
*both* "KeyDown" and "ReturnKeyDown", and the "KeyDown" action is
invoked after the "ReturnKeyDown" action. (This happens regardless of
whether one uses {"KeyDown" :> (...), "ReturnKeyDown" :> (...) } or
{"ReturnKeyDown" :> (...) "KeyDown" :> (...)} in the argument to
EventHandler.)
I've tried detecting the value of the key by using
CurrentValue["EventKey"] but this doesn't seem to do anything...
Any thoughts on how to solve this problem would be greatly appreciated!
Cheers,
Jason
--
Dr J. McKenzie Alexander
Department of Philosophy, Logic and Scientific Method
London School of Economics and Political Science
Houghton Street, London WC2A 2AE
Please access the attached hyperlink for an important electronic communications disclaimer: http://www.lse.ac.uk/collections/secretariat/legal/disclaimer.htm