将TextArea转换为AS3中的TextField

时间:2011-09-19 09:43:09

标签: actionscript-3 flash-cs5

我的MovieClip中有一个TextArea组件。当我双击它时,我想切换到TextField组件,允许我更改其内容。当我在外面点击时,我想重新启动它的原始类(TextArea)。

我该怎么做?

我这样做,但没有奏效:

element.addEventListener(MouseEvent.DOUBLE_CLICK, changeName);

private function changeName(e:MouseEvent):void{
   e.target.type = TextFieldType.INPUT;
}

其中element是TextArea(clasic和动态文本)。谢谢!

修改

enter image description here

这就是我的MovieClip的样子。 “名称”是我想允许用户更改的TextArea。我这样设置:

enter image description here

[西班牙语界面]

  1. Nombre de instancia =实例名称(空)
  2. Textoclásico(经典文字)
  3. Textodinámico(动态文字)
  4. MovieClip控制我自己的基类(称为'ConfLayer')。在里面我有这个:

    public function doStuff(e:MouseEvent):void{
       // element = TextArea 'Name'
       element.addEventListener(MouseEvent.DOUBLE_CLICK, changeName);
    }
    
    private function changeName(e:MouseEvent):void {
       var tarea:TextArea = e.target as TextArea;
       var tf:TextField = tarea.TextField;    // this line throwing error
       tf.type = TextFieldType.INPUT;
    }
    

    因为AS3给了我错误,我尝试了这个:

    private function changeName(e:MouseEvent):void {
       e.target.TextField.type = TextFieldType.INPUT;
    }
    

    当我双击TextArea元素时,前一个字符串将被删除,我无法写任何内容。

3 个答案:

答案 0 :(得分:0)

根据我上面的评论,TextArea有一个文本字段属性。

所以你应该可以这样做:

private function changeName(e:MouseEvent):void{

   var tarea:TextArea = e.target as TextArea;
   var tf:TextField = tarea.textField; //make sure that textfield is camelCase!!!
   tf.type = TextFieldType.INPUT;
}

答案 1 :(得分:0)

只有在第二次点击后才能进行字段编辑。我的想法是,这是为时已晚。该字段是可编辑的,但您需要再次单击。因此,在第一次点击后尝试使用一段时间(例如300英里)。如果没有单击,则将类型设置回DYNAMIC。第二次单击后,您将开始编辑文本字段。

答案 2 :(得分:0)

我使用TextField中的backgroundborder属性解决了我自己的问题。我不是直接在我的MovieClip上创建TextField,而是动态创建它。

// Field 'Name' of the layer
var tarea:TextField = new TextField();
tarea.text = 'Layer';
tarea.x = -80;
tarea.y = -23;
tarea.type = TextFieldType.DYNAMIC;
tarea.height = 20;

// Format the TextField
var format_tarea:TextFormat = new TextFormat();
format_tarea.font = "Arial";
format_tarea.size = 14;
format_tarea.bold = true;

tarea.setTextFormat(format_tarea,0,tarea.length);

然后,我添加了一些监听器,以便在我点击它时允许更改:

// Add event to allow name changes
tarea.addEventListener(MouseEvent.CLICK,changeName);

按ENTER键时,我接受更改

// Add event to accept changes on press ENTER key
tarea.addEventListener(KeyboardEvent.KEY_DOWN,acceptKeyboardName);

当TextField失去焦点时,也接受更改:

tarea.addEventListener(FocusEvent.FOCUS_OUT,acceptFocusName);

最后,我添加了自己的MovieClip

// Add to MC
mc.addChild(tarea);

与以下事件相关的处理程序如下:

private function changeName(e:MouseEvent):void
{
    e.target.setSelection(0,e.target.text.length);
    e.target.border = true;
    e.target.background = true;
    e.target.type = TextFieldType.INPUT;
}

private function acceptKeyboardName(e:KeyboardEvent):void
{
    if (e.charCode == 13)   // When pres ENTER, remove border, background and restore dynamic type
    {
        e.target.type = TextFieldType.DYNAMIC;
        e.target.border = false;
        e.target.background = false;
    }
}

private function acceptFocusName(e:FocusEvent):void
{
    // When lost focus, remove border, background and restore dynamic type
    e.target.type = TextFieldType.DYNAMIC;
    e.target.border = false;
    e.target.background = false;
}