如何取消Halo / Spark TextInput和TextArea组件中的编辑

时间:2011-06-02 14:14:49

标签: actionscript-3 textarea flex4 textinput flex-spark

我使用的是Flex 4,ActionScript 3。

在AdvancedDataGrid组件中,当您在单元格中处于编辑模式时,可以按Esc键取消编辑(即返回单元格中的上一个值)。

在Halo和Spark TextInput以及TextArea组件的编辑模式下,我原本期望同样的行为,并且惊讶地发现事实并非如此。

我查看了所有四个组件的属性,看看这是否是我需要配置的东西,但找不到任何东西。

这是需要编码的吗?

1 个答案:

答案 0 :(得分:3)

是的,这是必须编码的东西。这是我要采取的方法:

  1. 创建扩展TextInput的自定义组件。我们称之为UndoTextInput
  2. 向UndoTextInput添加一个新变量以存储TextInput的原始文本。我们称之为originalText
  3. focusIn事件上添加事件侦听器。在focusIn事件处理程序中,将当前文本值存储在originalText变量中。
  4. focusOut事件中添加活动。在focusOut事件中,将originalText的值设置回空字符串。
  5. keyDown事件上添加事件侦听器。在事件监听器中,检查是否按下了Escape(Keyboard.ESCAPE)键。如果是,请将文本重置为originalText
  6. 中存储的内容

    我希望这有帮助!

    <强>更新

    这是一个关于如何使用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;
                }
            }
        }
    }