Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.05.2013, 13:19
TuMko вне форума Посмотреть профиль Отправить личное сообщение для TuMko Найти все сообщения от TuMko
  № 1  
Ответить с цитированием
TuMko

Регистрация: May 2013
Сообщений: 26
Question Работа с текстовыми полями

1. Есть 2 текстовых поля infoText1 и infoText2. Как ограничить длину вводимых символов? пробовал прописывать maxChars, но эффекта желаемого не получил.
2. Есть кнопка nextbutton. Как сделать, чтобы она появлялась только тогда, когда в обоих полях есть текст, а если они пустые, то кнопка должна пропадать?

Код AS3:
package  
{
	/**
	 * ...
	 * @author 123
	 */
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
 
	public class SendMail extends Sprite
	{
		private var mailSpite:Sprite = new Sprite();
		private var formatMenuScheme:TextFormat = new TextFormat();
		private var infoText1:TextField = new TextField();
		private var infoText2:TextField = new TextField();
 
		public function SendMail() 
		{		
			formatMenuScheme.bold = true;
			formatMenuScheme.font = "Tahoma";
			formatMenuScheme.size = 16;
			formatMenuScheme.color = 0x666666;
 
			var windowFrame:Sprite = new Sprite();
			windowFrame.graphics.lineStyle(3, 0x999999);
			windowFrame.graphics.beginFill(0xFFFFFF, 1);
			windowFrame.graphics.drawRoundRect(150, 180, 540, 130, 15, 15);
			windowFrame.graphics.endFill();
 
			infoText1.type = TextFieldType.INPUT;
//			infoText1.autoSize = TextFieldAutoSize.LEFT;
			infoText1.border = true;
			infoText1.borderColor = 0xFF0000;
			infoText1.background = true;
			infoText1.backgroundColor = 0xCCCCCC;
			infoText1.x = 250;
			infoText1.y = 210;
			infoText1.width = 400;
			infoText1.height = 30;
			infoText1.maxChars = 25;   // количество символов
 
			infoText2.type = TextFieldType.INPUT;
//			infoText2.autoSize = TextFieldAutoSize.LEFT;
			infoText2.border = true;
			infoText2.borderColor = 0xFF0000;
			infoText2.background = true;
			infoText2.backgroundColor = 0xCCCCCC;
			infoText2.x = 250;
			infoText2.y = 250;
			infoText2.width = 400;
			infoText2.height = 30;
			infoText2.maxChars = 25;   // количество символов
 
			var nextbutton:MiniCustomSimpleButton = new MiniCustomSimpleButton();
			nextbutton.x = 400;
			nextbutton.y = 350;
			var nextButtonText:TextField = new TextField();
			nextButtonText.text = "Отправить";
			nextButtonText.autoSize = TextFieldAutoSize.CENTER;
			nextButtonText.x = 420;
			nextButtonText.y = 360;
			nextButtonText.setTextFormat(formatMenuScheme);
			nextButtonText.mouseEnabled = false;  // отвечает за перекрытие - отключено (с. 607)
 
 
			mailSpite.addChild(nextbutton);
			mailSpite.addChild(nextButtonText);
			mailSpite.addChild(windowFrame);
			mailSpite.addChild(infoText1);
			mailSpite.addChild(infoText2);
			addChild(mailSpite);
 
			nextbutton.addEventListener (MouseEvent.CLICK, clickNextButton);
			infoText1.addEventListener(TextEvent.TEXT_INPUT, infoText1InputListener);
			infoText2.addEventListener(TextEvent.TEXT_INPUT, infoText2InputListener);
 
		}
 
		private function infoText1InputListener (e:TextEvent):void {
			var infoText1:TextField = TextField (e.target);
			e.preventDefault();
			infoText1.replaceText(infoText1.caretIndex, infoText1.caretIndex, e.text);
 
 
			var regularFormat:TextFormat = new TextFormat();
			regularFormat.font = "Tahoma";
			regularFormat.size = 20;
			regularFormat.color = 0x666666;
			infoText1.setTextFormat(regularFormat, infoText1.caretIndex, infoText1.caretIndex + e.text.length);
 
			var newCaretIndex:int = infoText1.caretIndex + e.text.length;
			infoText1.setSelection(newCaretIndex, newCaretIndex);
			trace(infoText1.text);
 
		}
 
		private function infoText2InputListener (e:TextEvent):void {
			var infoText2:TextField = TextField (e.target);
			e.preventDefault();
			infoText2.replaceText(infoText2.caretIndex, infoText2.caretIndex, e.text);
 
 
			var regularFormat2:TextFormat = new TextFormat();
			regularFormat2.font = "Tahoma";
			regularFormat2.size = 20;
			regularFormat2.color = 0x666666;
			infoText2.setTextFormat(regularFormat2, infoText2.caretIndex, infoText2.caretIndex + e.text.length);
 
			var newCaretIndex:int = infoText2.caretIndex + e.text.length;
			infoText2.setSelection(newCaretIndex, newCaretIndex);
			trace(infoText2.text);
 
		}
 
		private function clickNextButton (e:MouseEvent):void {
 
		}
 
 
	}
 
}
Вложения
Тип файла: zip WriteToFile.zip (14.2 Кб, 22 просмотров)

Старый 31.05.2013, 13:28
Termin вне форума Посмотреть профиль Отправить личное сообщение для Termin Найти все сообщения от Termin
  № 2  
Ответить с цитированием
Termin
 
Аватар для Termin

Регистрация: Sep 2006
Сообщений: 111
Вопрос 2:
Пологаю создать условие:
Код AS3:
if(infoText1.text!=""&& infoText2.text!="")
{
   nextbutton.visible = true;
}
Думаю както так)))

Старый 31.05.2013, 15:40
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
TuMko, запомните на будущее: одна тема — один вопрос, и название темы должно отражать суть вопроса максимально конкретно. То есть не "Текстовое поле" и не "Работа с текстовым полем" (что одно и то же), а "Как ограничить кол-во символов в текстовом поле", например.
__________________
Reality.getBounds(this);

Старый 31.05.2013, 16:04
Final Hope вне форума Посмотреть профиль Найти все сообщения от Final Hope
  № 4  
Ответить с цитированием
Final Hope
Banned
[+5 04.06.13]
[+1 08.06.13]

Регистрация: May 2013
Сообщений: 52
maxChars работает следующим образом:
Если maxChars = 0, то можно ввести любое количество символов.
Если maxChars = n, то можно ввести (n - 1) количество символов.
То есть, если вы хотите вводить только 5 символов, то нужно задавать maxChars = 6.

Старый 31.05.2013, 18:59
TuMko вне форума Посмотреть профиль Отправить личное сообщение для TuMko Найти все сообщения от TuMko
  № 5  
Ответить с цитированием
TuMko

Регистрация: May 2013
Сообщений: 26
Termin, спасибо, в принципе помогло, вот только когда удаляю из строк текст, кнопка не сразу становится невидимой, а лишь после того, как я нажму пробел в полях ввода.
Wolsh, я учту на будущее, спасибо.
Final Hope, какое бы значение maxChars я не прописывал, все равно вводится бесконечное число символов. Я писал как в конструкторе, так и в функциях infoText1InputListener и infoText2InputListener, но не работает вообще.

Старый 31.05.2013, 19:25
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 6  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Уберите preventDefault и replaceText из обработчиков событий текстового поля и проверьте. Есть у меня подозрения, что в случае maxChars последовательность событий бывает очень и очень интересной.

Старый 31.05.2013, 22:25
TuMko вне форума Посмотреть профиль Отправить личное сообщение для TuMko Найти все сообщения от TuMko
  № 7  
Ответить с цитированием
TuMko

Регистрация: May 2013
Сообщений: 26
тогда ошибку выдает: [Fault] exception, information=RangeError: Error #2006: The supplied index is out of bounds.
форматирование строк ввода я брал из книги к.мука, так что там по идее все должно быть правильно.

Старый 31.05.2013, 22:54
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 8  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Ну да, есть там такое в setSelection. А зачем вообще эти все приседания с текстом? Чего вы хотите добиться? Если я правильно логику понял, defaultTextFormat сделает за вас все, что нужно. Ну и на change можно подписаться, если очень хочется обрабатывать события изменения. И если очень хочется вручную модифицировать textfield, то и длину нужно вручную ограничивать при обновлении.

Старый 31.05.2013, 23:01
Termin вне форума Посмотреть профиль Отправить личное сообщение для Termin Найти все сообщения от Termin
  № 9  
Ответить с цитированием
Termin
 
Аватар для Termin

Регистрация: Sep 2006
Сообщений: 111
TuMko По вопросу 2, вы создайте условие в том слуателе событий где он будет обрабатываться чаще чем событие пробела))) Например в ENTER_FRAME будет проверятся условие в секунду столько раз сколько кадров проигрывается)))

Старый 31.05.2013, 23:03
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 10  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Суть ошибки вот в чём:

Введенное пользователем максимальное число символов, которое может содержать текстовое поле. Сценарий может вставить больше текста, чем допускает maxChars. Свойство maxChars указывает только количество символов, которые может ввести пользователь. Если это свойство имеет значение 0, пользователь может ввести любое количество символов. (с) Adobe

У Вас программа внутри меняет текст, если Вы запретите ей это делать, то пользователь не сможет ввести текст.

Вот, вроде решает.

Код AS3:
private function infoText1InputListener (e:TextEvent):void {
			if (infoText1.length < e.target.maxChars) { // Вот и всё.
			var infoText1:TextField = TextField (e.target);
			e.preventDefault();
			infoText1.replaceText(infoText1.caretIndex, infoText1.caretIndex, e.text);
 
 
			var regularFormat:TextFormat = new TextFormat();
			regularFormat.font = "Tahoma";
			regularFormat.size = 20;
			regularFormat.color = 0x666666;
			infoText1.setTextFormat(regularFormat, infoText1.caretIndex, infoText1.caretIndex + e.text.length);
 
			var newCaretIndex:int = infoText1.caretIndex + e.text.length;
			infoText1.setSelection(newCaretIndex, newCaretIndex);
			trace(infoText1.text);
			}
		}

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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