Alihkan bool dari False ke True saat tombol ditekan?
Saya ingin membiarkan variabel boolean beralih saat saya menekan tombol pada keyboard.
Misalnya, saya menulis
activateE := Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], NotebookEventActions -> {{"KeyDown", "e"} :> activateE}]
dan kemudian coba pantau penekanan tombol melalui
edown = False;
Dynamic[edown]
Sementara tombol e
sekarang berhenti menghasilkan input teks apa pun ke dalam notebook, sayangnya tombol tersebut Dynamic
selalu terus ditampilkan False
, terlepas dari seberapa sering saya menekan tombol tersebut e
. Apa yang saya lakukan salah, atau bagaimana melakukan ini dengan benar?
EDIT:
Atau, saya mencoba CurrentValue
fungsinya. Sebagai contoh,
Dynamic[CurrentValue["ModifierKeys"]]
menunjukkan dengan benar misalnya saat Ctrl
tombol sedang ditekan. Tetapi jika saya mencoba
Dynamic[CurrentValue["EventKey"]]
hasilnya None
tidak peduli tombol mana yang saya tekan. Apakah ada opsi CurrentValue
yang akan mendaftarkan penekanan tombol biasa, seperti surat e
?
EDIT2:
Apa yang tampaknya berhasil, adalah
EventHandler[InputField[], {"KeyDown", "e"} :> activateE]
tetapi hanya jika saya pertama kali mengklik InputField untuk menjadikannya fokus.
Jawaban
Menggunakan NotebookEventActions
dengan opsi PassEventsUp -> True
memberikan perilaku yang diinginkan dalam Versi 11.3 (Windows 10-64 bit):
ClearAll[activateE]
activateE:= Block[{}, edown = True;];
SetOptions[EvaluationNotebook[],
NotebookEventActions -> {{"KeyDown", "e"} :> activateE, PassEventsUp -> True}]

Variasi: Beralih antara False
dan True
saat tombol e
ditekan:

$Version
"11.3.0 untuk Microsoft Windows (64-bit) (7 Maret 2018)"