flex – 如果有焦点,如何让空格键上的按钮不激活?
我试图阻止的行为是在用户点击按钮后,按钮保持焦点,然后如果用户点击空格键,则按钮再次触发.所以我认为可以通过将焦点设置在别处,或者通过让按钮忽略空格键来解决.我已经尝试在按钮上添加以下keyDown事件侦听器,但它不起作用.
private function btn_keyDown(event:KeyboardEvent):void { // try to ignore spaces,i.e. don't click on SPACE when it has focus if (event.keyCode == Keyboard.SPACE) { } } 我尝试通过执行以下操作来更改焦点,在单击按钮时调用的函数结束时: stage.focus = parent; 但那也不起作用. 解决方法
您将需要创建自定义按钮组件并覆盖keyDownHandler.但是,如果要选择要停止的按钮,则需要为代码添加条件.它应该是这样的:
package Sandbox { import mx.controls.Button; import flash.events.KeyboardEvent; public class KeyButton extends Button { public function KeyButton() { super(); } protected override function keyDownHandler(e : KeyboardEvent) : void { if (e.keyCode == 32) { // Spacebar return; } else if (e.keyCode == 67) { // Letter C this.parentApplication.setStyle ("backgroundColor","#00aa00"); } super.keyDownHandler (e); } } } 这样做的好处是其他键仍然可以正常工作,比如Enter,或者你可以为不同的键添加更多的条件,例如,如果你想按C或其他什么就想改变按钮的颜色. 虽然我们正在使用它,但KeyboardEvent.keyCode和charCode之间存在差异. keyCode是物理键盘上键的ID,这意味着小写c和大写C是相同的(keyCode == 67).另一方面,charCode是ASCII表中字符的地址,因此c和C是不同的(C是67而c是99).简而言之,keyCode不区分大小写. 哦,是的.如果你需要检查一个密钥的密钥和字符代码(包括像Backspace这样的仲裁代码),请查看这个page Adob??e的优秀人员. 我还制作了一个application来说明这一点.它是一个标准的Flex Builder项目,但如果您没有它,则源位于src文件夹中.启动应用程序,然后单击按钮将其聚焦.按钮的点击事件可以显示一些文本.虽然它有焦点,按空格键,它应该触发点击事件并打印更多文本,但没有任何反应!现在,按c键更改应用程序的背景颜色.干净,嗯? 你可以找到源here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |