如何将UNDO添加到AS3中的文本字段?

时间:2013-08-09 10:56:50

标签: actionscript-3 flash-cs5

我有一个带剪切,粘贴和撤消按钮的简单文本编辑器。我有这个用于剪切和粘贴,但我不知道如何创建撤消按钮?

var clipboardFmt:TextFormat = new TextFormat();
var initialPoint:Number = new Number();
var finalpoint:Number = new Number();
var clipBoard:String = new String();

cut_button.addEventListener(MouseEvent.CLICK,cutText);
paste_button.addEventListener(MouseEvent.CLICK, pastefromClipboard);

function cutText(event:MouseEvent):void
{
    clipBoard = txt.text.substring(txt.selectionBeginIndex,txt.selectionEndIndex);
    System.setClipboard(clipBoard);
    txt.replaceText(txt.selectionBeginIndex,txt.selectionEndIndex,"");
}

function pastefromClipboard(e:Event):void
{
    txt.replaceText(txt.selectionBeginIndex,txt.selectionEndIndex,clipBoard);
    finalpoint = initialPoint + clipBoard.length;
    txt.setSelection(initialPoint,finalpoint);
    txt.setTextFormat(clipboardFmt, initialPoint,finalpoint);
}

txt.addEventListener(Event.CHANGE,count);
function count(e:Event):void
{
    wn.text = countWords(txt.text);
    function countWords(input:String):int
    {
        return input.match(/[^\s]+/g).length;
    }
}

2 个答案:

答案 0 :(得分:0)

您需要在变量中存储文本字段文本的副本。每次更改文本字段的值但在应用更改之前(事件称为TextEvent.TEXT_INPUT)将文本字段值的副本保存到此变量中。按下undo按钮时,将文本字段值设置为存储在此变量中的值。

这是最简单的解决方案,只允许您撤消一步。您可以使用数组而不是单个变量来存储文本字段的多个状态,这将允许您撤消几个步骤。

答案 1 :(得分:0)

创建基于数组的撤消系统。不要使用剪贴板,它将无法正常工作。