pxt-calliope/docs/reference/event-handler.md
Juri Wolf 5f7a8e5301
Updates for V4 (#197)
* update yotta defaults for 16kb devices

* refactor deprecated blocks

* updates for button events

* update button events

* update refference

* update docs

* update docs

* update button event blocks

* update docs

* update block id
2022-08-10 09:36:19 -07:00

2.4 KiB

event handler

Event handlers - how they work.

An event handler is code that is associated with a particular event, such as "button A pressed". You create (or register) the association between an event and an event handler by calling a function named "on ". After registering an event handler with an event, then whenever that event occurs, the event handler code executes.

Registering an event handler

Functions named "on " create an association between an event and the event handler code. For example, the following code registers the event handler (the code between the do and end keywords) with the event of a press of button A:

input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    basic.showString("hello", 150)
})

After this code executes, then whenever button A is pressed in the future, the string "hello" will be printed.

Event handlers are active for the entire program execution

Once you have registered an event handler for an event, like above, that event handler is active for the rest of the program execution. If you want to stop the string "hello" from printing each time button A is pressed then you need to arrange for the following code to execute:

input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
})

The above code associated an event handler that does nothing with the event of a press of button A.

There is only one event handler per event

The above example also illustrates that there is only one event handler for each event. What is the result of the following code?

input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    basic.showString("hello", 150)
})
input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    basic.showString("goodbye", 150)
})

The answer is that whenever button A is pressed, the string "goodbye" will be printed. If you want both the strings "hello" and "goodbye" to be printed, you need to write the code like this:

input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    basic.showString("hello", 150)
    basic.showString("goodbye", 150)
})

To learn more

To learn more about how the @boardname@ queues up and schedules event handlers, see the @boardname@ - a reactive system

see also

on button pressed, on pin up, on shake