我使用的是Flex 4,ActionScript 3。
在AdvancedDataGrid组件中,当您在单元格中处于编辑模式时,可以按Esc键取消编辑(即返回单元格中的上一个值)。
在Halo和Spark TextInput以及TextArea组件的编辑模式下,我原本期望同样的行为,并且惊讶地发现事实并非如此。
我查看了所有四个组件的属性,看看这是否是我需要配置的东西,但找不到任何东西。
这是需要编码的吗?
答案 0 :(得分:3)
是的,这是必须编码的东西。这是我要采取的方法:
UndoTextInput
。originalText
。focusIn
事件上添加事件侦听器。在focusIn
事件处理程序中,将当前文本值存储在originalText
变量中。focusOut
事件中添加活动。在focusOut
事件中,将originalText
的值设置回空字符串。keyDown
事件上添加事件侦听器。在事件监听器中,检查是否按下了Escape(Keyboard.ESCAPE
)键。如果是,请将文本重置为originalText
。我希望这有帮助!
<强>更新强>
这是一个关于如何使用Actionscript类执行此操作的快速示例。随意修改。
package
{
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import spark.components.TextInput;
public class UndoTextInput extends TextInput
{
private var originalText:String = "";
public function UndoTextInput()
{
super();
this.addEventListener(FocusEvent.FOCUS_IN, focusInEventHandler);
this.addEventListener(FocusEvent.FOCUS_OUT, focusOutEventHandler);
this.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyPress);
}
protected function focusOutEventHandler(event:FocusEvent):void
{
this.originalText = "";
}
protected function focusInEventHandler(event:FocusEvent):void
{
this.originalText = this.text;
}
protected function checkKeyPress(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.ESCAPE)
{
event.stopImmediatePropagation();
this.text = this.originalText;
}
}
}
}