Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сделать текстовое поле нередактируемым (http://www.flasher.ru/forum/showthread.php?t=183440)

AzagThoth 21.08.2012 19:37

Сделать текстовое поле нередактируемым
 
Здравствуйте. Подскажите пожалуйста как можно сделать текстовое поле TextField, добавленное на этапе разработки, нередактируемым. При помощи AS3 кода.
Вот так к сожалению не получается:
Код AS3:

login_txt.selectable = !emailOnly_ch.selected;
if(emailOnly_ch.selected){
        login_txt.type = TextFieldType.DYNAMIC;
} else {
        login_txt.type = TextFieldType.INPUT;
}

emailOnly_ch - компонент CheckBox его статус хочу использовать для установки режимов на разрешение и запрет редактирования

MINASTIS 21.08.2012 20:12

textfield.selectable = false

AzagThoth 21.08.2012 21:05

К сожалению не помогает. (это первая строка моего кода)

Krusty 21.08.2012 21:11

Отменить действие по умолчанию.

AzagThoth 21.08.2012 21:31

Цитата:

Сообщение от Krusty (Сообщение 1093222)
Отменить действие по умолчанию.

Не очень понятно о чём речь. Можете пояснить?

MINASTIS 21.08.2012 21:33

Ой, не заметил. Странно, кстати, что selectable не работает и указывание типа поля тоже.

Добавлено через 7 минут
Создать листенер для текстового поля, имеет ввиду Krusty.
К примеру так:
Код AS1/AS2:

        public class Main extends Sprite 
        {
                internal var ableToEdit:Boolean = new Boolean(false);
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        var woot:TextField = new TextField;
                        woot.border = true;
                        woot.type = TextFieldType.INPUT;
                        addChild(woot);
                        woot.addEventListener(TextEvent.TEXT_INPUT, checkIfAble)
                }
                private function checkIfAble(e:TextEvent):void {
                        if (!ableToEdit) {
                                e.preventDefault();
                        }
                }
 
        }

Штука preventDefault() позволяет при срабатывании листенера не делать то, что он "словил" :)
В нашем случае, при попытке ввода в текстовое поле, если переменная ableToEdit равна false - ввести ничего нельзя.

expl 21.08.2012 21:57

У меня Ваш код работает, смотрите что Вы присваиваете.

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.text.TextFieldType;
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        var emailOnly_ch:Object;
                        var login_txt:TextField;
 
                        // Эмулируем окружение
                        emailOnly_ch = { };
                        emailOnly_ch.selected = true;
                        login_txt = new TextField();
                        login_txt.width = 200;
                        addChild(login_txt);
                        login_txt.text = "emailOnly_ch.selected = true";
 
                        // Проверяем код
                        login_txt.selectable = !emailOnly_ch.selected;
                        if(emailOnly_ch.selected){
                                login_txt.type = TextFieldType.DYNAMIC;
                        } else {
                                login_txt.type = TextFieldType.INPUT;
                        }
 
                        // Эмулируем окружение
                        emailOnly_ch = { };
                        login_txt = new TextField();
                        login_txt.x = 200;
                        login_txt.width = 200;
                        addChild(login_txt);
                        login_txt.text = "emailOnly_ch.selected = false";
                        emailOnly_ch.selected = false;
 
                        // Проверяем код
                        login_txt.selectable = !emailOnly_ch.selected;
                        if(emailOnly_ch.selected){
                                login_txt.type = TextFieldType.DYNAMIC;
                        } else {
                                login_txt.type = TextFieldType.INPUT;
                        }
                }
        }
 
}


AzagThoth 21.08.2012 22:31

У меня всё заработало. Изменил идентификатор login_txt на l_txt. Возможно где-то на сцене был двойник с таким же именем.

Добавлено через 6 минут
Ага. На сцене было пять таких дублей. Вот что делает с людьми невнимательность :) Спасибо всем за помощь. Расставил плюсы в репу.


Часовой пояс GMT +4, время: 11:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.