修复鼠标盒中键盘事件的错误考虑以下代码:
Names Default To Here( 1 );
New Window( "SetKey Example", mb = MouseBox( tb = Text Box( "Press a key." ) ) );
mb << setkey( Function( {this, key}, show( key ) ) );
mb << setkeyenable( 1 );
mb << setfocus;按下按钮,例如钾, 导致附加函数运行两次。很明显,人们可以通过计时等方式产生变通方法,但我认为即使是 JMP 开发人员也会认为这种基于用户的变通方法是不幸的。
是什么启发了这个愿望清单请求?
您希望看到哪些改进?
为什么这个想法很重要?
自动化和脚本回复:修复鼠标盒中键盘事件的错误哇,多么酷的功能:设置键!
感谢您提及...
不过,真是奇怪的事情!
令人惊讶的是,该函数并不总是被触发两次(参见 a、b、r、t、z),对于 Return(和 Enter),一个人会得到一个额外的 End”:
带有德语键盘的 Jmp17:

回复:修复鼠标盒中键盘事件的错误我想知道是否是由于按下键并再次释放它。
但是,当您按住按键时,该功能会一次又一次地触发。
按下回车键时,结果特别有趣。 然后是:

回复:修复鼠标盒中键盘事件的错误我想知道命令的两个触发器之间需要多长时间 - 通过这样做,我找到了一个简单的解决方案:
只需稍微发出命令更长比 show(key) - 它只是触发了 1x 
第一个函数被触发两次:

取消注释第二个(稍长)函数解决了这个问题:

Names Default To Here( 1 );
time0 = 0;
doSomething = Function( {this, key},
time = HP Time();
Write("\!n v1: ",key," ", time);
);
doSomething2 = Function( {this, key},
time = HP Time();
dt = (time - time0)/1000000;
Write ( "\!n v2: ", key," ", dt);
time0 = time;
);
New Window( "SetKey Example",
H List box(mb = MouseBox( tb = Text Box( "Press a key." )), Button Box ("save", onSave()))
);
mb << setkey( Function( {this, key}, doSomething( this, key ) ) );
//mb << setkey( Function( {this, key}, doSomething2( this, key ) ) );
mb << setkeyenable( 1 );
mb << setfocus;
回复:修复鼠标盒中键盘事件的错误 - 状态更改为:已确认你好@ErraticAttack ,以及所有发表评论的人。 这听起来像一个错误。 我们正在与我们的技术支持人员分享。
回复:修复鼠标盒中键盘事件的错误不幸的是,Mouse Box 文档并不十分完整。我们知道,并且它在要更正的列表中。同时,请注意 << Set Key 消息旨在响应所附函数的“布尔”返回值。如果该函数返回“true”(如 1),则它向 Set Key 表明按键已被处理,您将不会获得明显的第二个函数调用。如果该函数返回“false”(如 0),您将获得 OP 示例所示的行为。这是对 OP 示例的修改,它为每次按键将单个语句写入日志。
Names Default To Here( 1 );
New Window( "SetKey Example", mb = MouseBox( tb = Text Box( "Press a key." ) ) );
mb << setkey( Function( {this, key},
show( key );
1; // return "boolean" to indicate if the key press was processed.
) );
mb << setkeyenable( 1 );
mb << setfocus;回复:修复鼠标盒中键盘事件的错误谢谢@_jr ,这完全有道理——就像 Qt 事件一样。
回复:修复鼠标盒中键盘事件的错误 - 状态更改为:已交付