Удаление текстовых полей

Динамически удалить текстовое поле можно, используя метод removeTextField() класса TextField.

Например:
this.createTextField("pole", 0, 200, 200, 180, 80);
pole.removeTextField(); // Пробуем удалить текстовое поле
trace(pole); // Выводит: undefined (поле было удалено успешно)

Метод removeTextField() предельно схож с методом removeMovieClip(). Поэтому и тонкости использования у них идентичные:

• Во встроенном словаре ActionScript утверждается, что метод removeTextField() способен удалять лишь созданные программно текстовые поля. На самом деле это не так. Данный метод может удалить любое текстовое поле, но при условии, что оно располагается на неотрицательной глубине. Поэтому, если вы хотите применить метод removeTextField() по отношению к созданному вручную полю, предварительно переместите его на допустимую глубину. К сожалению, сделать это напрямую невозможно, так как у текстовых полей нет аналога метода swapDepths() клипов. Однако решить эту задачу все же можно, создав на положительной глубине пустой клип, а затем обменяв его глубинами с необходимым текстовым полем. Благо, метод getDepth() имеется и у текстовых полей:

trace(pole); // Выводит: _level0.pole (текстовое поле существует)
this.createEmptyMovieClip("clip", 10000); // Создаем пустой клип
clip.swapDepths (pole.


getDepth()); // Обмениваем клип и текстовое поле
// глубинами
pole.removeTextField(); // Пробуем удалить текстовое поле
trace(pole); // Выводит: undefined (поле удалилось успешно)

Впрочем, удалить созданное вручную текстовое поле можно и проще, создав пустой клип сразу на занимаемой им глубине. Удалить же сам клип уже не составит труда:

this.createEmptyMovieClip("clip", pole.getDepth());

Оптимальный же вариант решения этой проблемы связан с включением в цепочку наследования класса TextField прототипа класса MovieClip. При этом к текстовым полям можно будет применять методы клипов, в том числе и swapDepths():

trace(pole); // Выводит: _level0.pole [текстовое поле существует)
TextField.prototype.__proto__ = MovieClip.prototype; // Делаем методы
// клипов доступными полям
pole.swapDepths(10000); // Помещаем поле на доступную для удаления
// глубину
pole.removeTextField(); // Пробуем удалить поле
trace(pole); // Выводит: undefined (поле было удалено успешно)

• Метод removeTextField() не способен удалять поля, расположенные на глубинах, превышающих 1048575 (0xFFFFF).


По этой причине стоит воздержаться от применения очень больших значений глубины:

this.createTextField("pole",0xFFFFF+1,200,200,40,50); // Создаем поле
// на излишне большой глубине
pole.removeTextField(); // Пробуем удалить поле trace(0xFFFFF);
// Выводит: _level0.pole (поле удалено не было)

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Автоматическое удаление пробелов. Свойство condenseWhite
Встраивание в фильм целого шрифта
Динамическая замена выделенного текста. Метод replaceSel()
Динамическое задание выделения. Метод setSelection()
Задание и извлечение текста поля

Вернуться в раздел: Action Script / 13. Работа с текстом