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

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

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

Регистрация: Oct 2010
Сообщений: 3
По умолчанию Как обратиться к свойству объекта TextField из класса кнопки

На объекте главной формы(mainForm.as) лежит объект кнопка (myButton.as) и экземпляр динамического текста (txt)

Название: Безымянный.JPG
Просмотров: 302

Размер: 10.7 Кб

Как из класса myButton.as(при событии клик по кнопке) изменить свойство text
экземпляра txt???
txt - в свою очередь создается в mainForm.as, оператором new




В Actionscript 2.0 я обращался через _рут.. В делфи подключается в uses и все свойства становятся доступными..
ну подскажите, пожалуйста, как обращаться к сторонним объектам в АС 3.0
всю документацию перерыл нету ничего, помогите господа.


Последний раз редактировалось peromax; 11.10.2010 в 18:12.
Старый 11.10.2010, 19:28
iCluster вне форума Посмотреть профиль Отправить личное сообщение для iCluster Найти все сообщения от iCluster
  № 2  
Ответить с цитированием
iCluster

Регистрация: Oct 2010
Адрес: PNZ
Сообщений: 20
Я бы сделал так:
Код AS3:
package  
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
 
    /**
     * @author Roman
     */
    public class TestButton extends Sprite 
    {
        private var _button: MyButton = null;
        private var _textField: TextField = null;
 
        public function TestButton()
        {
            _textField = new TextField();
            addChild(_textField);
            _textField.text = 'someText';
 
            _button = new MyButton();
            addChild(_button);
            _button.addEventListener(MouseEvent.CLICK, onButtonClick);
        }
 
        private function onButtonClick(event: MouseEvent):void
        {
            _textField.text = 'otherText';
        }
    }
}


Последний раз редактировалось iCluster; 11.10.2010 в 22:26.
Старый 12.10.2010, 00:30
peromax вне форума Посмотреть профиль Отправить личное сообщение для peromax Найти все сообщения от peromax
  № 3  
Ответить с цитированием
peromax

Регистрация: Oct 2010
Сообщений: 3
Спасибо за ответ, но это не совсем то. В одном файле обращаться у меня получается, а вот когда в разных... У меня есть класс кнопки(отдельный файл *.ас) в котором определены функции и листерны и отдельный файл мэйнФорм.ас в котором вызывается конструктор этой кнопки, и конструктор тхт. Можно ли в такой ситуации обратиться из класса кнопки к свойству текста? Или нужно именно что бы кнопка обрабатывала листерны для текста в одном файле ?


Последний раз редактировалось peromax; 12.10.2010 в 00:40.
Старый 12.10.2010, 00:57
iCluster вне форума Посмотреть профиль Отправить личное сообщение для iCluster Найти все сообщения от iCluster
  № 4  
Ответить с цитированием
iCluster

Регистрация: Oct 2010
Адрес: PNZ
Сообщений: 20
Я, конечно, могу ошибаться, но если вы не преследуете какой-то определенной цели данным требованием, то лучше все-таки назначать обработчик действий на месте. По вашему вопросу - можно в кнопку передавать ссылку на текстовое поле и в кнопке изменять текст, можно при нажатии на кнопку высылать кастомное событие, в котором передавать необходимый текст, ловить его в вашей форме и в ней менять текст, можно передавать функцию главной формы в кнопку, которая будет вызываться при нажатии на нее... можно придумать еще 100 и один способ, но зачем? listeners в классе вашей кнопки нужны скорее для того, чтобы менять графическое ее состояние при нажатии, или обрабатывать какие-то специфические функции, присущие этой кнопке. Если вы тесно свяжете кнопку с текстовым полем - то будет весьма проблематично использовать ее повторно для других целей.

Старый 12.10.2010, 01:30
peromax вне форума Посмотреть профиль Отправить личное сообщение для peromax Найти все сообщения от peromax
  № 5  
Ответить с цитированием
peromax

Регистрация: Oct 2010
Сообщений: 3
Спасибо огромное, я просто новичок в АС 3.0 наверное вы правы.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Советую почитать что-нибудь про ООП. Некоторые вещи сложны при первом знакомстве, но есть очень полезные концепции, помогающие связно думать и строить проект, прежде всего взаимодействия. Кратко так - у каждого объекта должна быть своя простая миссия. Кнопка просто нажимается, поле просто выводит текст, в основном классе - логика. Когда кнопка инкапсулирована, ей не надо ничего вообще знать о том, что происходит вовне. Она просто нажимается и посылает событие что ее нажали, всё. Такую кнопку Вы можете использовать где угодно и как угодно, а проект превращается в подобие конструктора, собираясь из отдельных деталек. Основному классу не обязательно знать об оверСтейте кнопки, ему нужны только события кнопки. Кнопке не надо знать, что произойдет когда ее кликнут, а тем более - что где-то есть какое-то поле, в которое надо передать какой-то текст... Это же просто кнопка! Зачем пихать в нее логику самого приложения?)))
__________________
Reality.getBounds(this);

Старый 12.10.2010, 14:20
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 7  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Вдохновившись сообщением от Wolsh, сваял вот такой примерчик

Main
Код AS3:
package {
 
    import components.ManagerObjects;
 
    import flash.display.Sprite;
 
    [SWF(backgroundColor="0xFFFFFF", width="800", height="600", frameRate="30")]
 
    public class Main extends Sprite {
 
        private const PAD:uint = 10;
 
        //CONSTRUCTOR
        public function Main() {
            init();
        }
 
        private function init():void {
 
 
            //                 сообщение по дифолту | высота текстФилда | имя кнопок | кол.во | сдвиг
            var managerObject:ManagerObjects = new ManagerObjects("ТЫЦ", 100, "Button", 5, PAD);
            addChild(managerObject);
            managerObject.y = PAD
            managerObject.x = PAD
 
        }
 
    }//class
}//package
ManagerObjects, здесь тусят все объекты, которые у нас есть(кнопки, текстФиелд)
Код AS3:
package components {
 
	import components.ManagerButton;
	import components.ManagerText;
 
	import events.CommonEvent;
 
	import flash.display.Sprite;
 
	public class ManagerObjects extends Sprite {
 
		//VARIABLES
		private var mButton:ManagerButton;
		private var mText:ManagerText;
 
		//CONSTRUCTOR
		public function ManagerObjects(name:String, heightText:uint, nameButton:String, numButton:uint, PAD:uint){
 
			init(name, heightText, nameButton, numButton, PAD)
 
		}
 
		private function init(name:String, heightText:uint, nameButton:String, numButton:uint, PAD:uint):void {
 
			mText = new ManagerText("ТЫЦ", 100)//дали первоначальное сообщение текст фиелду, задали высоту текст фиелду
			addChild(mText);
 
			//добавили кнопки
			mButton = new ManagerButton("Button", 5, PAD);// имя кнопок | кол.во | сдвиг
			addChild(mButton);
			mButton.y = mText.height+PAD; // выровняли кнопки по высоте с текст филдом
			mText.width = mButton.width; // выровняли текст фиелд по соотношению с кол.вом кнопок 
 
			mButton.addEventListener(CommonEvent.MESSAGES, setupMes); // получаем события при нажатии на кнопки
		}
 
		private function setupMes(e:CommonEvent):void{
 
			mText.sendMessage(e.txtMessage); //отправили данные манагерТексту
 
		}
	}
}
ManagerButton, здесь тусят только кнопки
Код AS3:
package components {
	import controls.SingleButton;
 
	import events.CommonEvent;
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class ManagerButton extends Sprite {
		//VARIABLES
		private var button:SingleButton;
 
		//CONSTRUCTOR	
		public function ManagerButton(name:String, num:uint, PAD:uint) {
 
			init(name, num, PAD);
		}
 
		private function init(name:String, num:uint, PAD:uint):void {
 
			for(var i:uint = 0; i < num; i++){
			button = new SingleButton(name+ " - "+i);
			button.x = Number(button.width+PAD)*i;
			button.name = name+i;	
			button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
			addChild(button);
 
			}
		}
		private function mouseDown(e:MouseEvent):void{
 
			var txtMessage:String = e.currentTarget.name;
 
			dispatchEvent(new CommonEvent(CommonEvent.MESSAGES, txtMessage));
			//trace(e.currentTarget.name+"")
 
		}
 
	}//class
}//package
ManagerText, здесь основная цель манагера заключается в получении и отправке обновленных данных самому текстФиелду, но по сути в данном примере, можно было и без него обойтись, и отправлять данные на прямую.
Код AS3:
package components {
	import events.TextFieldEvent;
 
	import flash.display.Sprite;
 
	public class ManagerText extends Sprite {
 
		//VARIABLES
		private var textInput:TextInput;
 
		//CONSTRUCTOR
		public function ManagerText(message:String, heightNum:uint){
 
			init(message, heightNum);
 
		}
 
		private function init(message:String, heightNum:uint):void{
 
			textInput =	new TextInput(message, heightNum);
			addChild(textInput);
 
		}
		public function sendMessage(txt:String):void {
 
			textInput.replaceMessage(txt);
 
		}
 
	}//class
}//package
TextInput, собственно сам текстФиелд.
Код AS3:
package components {
 
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldType;
 
 
	public class TextInput  extends Sprite {
 
		//VARIABLES
		private var txt:TextField;
 
 
		//CONSTRUCTOR
		public function TextInput(message:String, heightNum:uint){
 
			init(message, heightNum);
 
		}
 
		private function init(message:String, heightNum:uint):void{
 
			txt = new TextField();
			txt.type = TextFieldType.INPUT;
			txt.height = heightNum;
			txt.width = 400;
			txt.border = true;
			txt.multiline = true;
			txt.wordWrap = true;
			txt.text = message;
			addChild(txt);	
		}
 
		public function replaceMessage(_txt:String):void {
 
			txt.text = _txt;
 
		}
 
	}//class
}//package
SingleButton, класс реализует кнопку с текстфилдом.
Код AS3:
package controls {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
 
	public class SingleButton extends Sprite {
 
		private var txt:TextField;
		private var label:String;
		private const WIDTH:uint = 50;
		public const HEIGHT:uint = 30;
		private var	sprite:Sprite;
		private var format:TextFormat;
 
		//CONSTRUCTOR
		public function SingleButton(name:String) {
 
			label = name;
			init(label);
		}
 
		private function init(label:String):void {
 
			format = new TextFormat();
			txt = new TextField;
			addChild(txt);
			txt.text = label
			txt.autoSize = TextFieldAutoSize.LEFT;
			//format
			format.font = "Verdana";
                        format.color = 0x000000;
                        format.size = 20;
 
                        txt.height = HEIGHT;
 
			txt.setTextFormat(format);  			
                        txt.defaultTextFormat = format;
                        txt.selectable = false;
 
			addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			addEventListener(MouseEvent.ROLL_OUT, onRollOut);
 
			sprite = new Sprite();
			sprite.graphics.beginFill(0xFFFFFF);
			sprite.graphics.drawRoundRect(0, 0, txt.width, HEIGHT, 10, 10);
			sprite.graphics.endFill();
			addChild(sprite);
			sprite.addChild(txt);
		}
 
		private function onRollOver(event:MouseEvent):void {
			updateGraphics(0x000000);
		}
 
		private function onRollOut(event:MouseEvent):void {
			updateGraphics(0xFFFFFF);
			format.color = 0x000000;
			txt.setTextFormat(format);  
		}
		private function updateGraphics(color:uint):void {
			graphics.clear();
 
			sprite.graphics.beginFill(color);
			sprite.graphics.drawRoundRect(0, 0, txt.width, HEIGHT, 10, 10);
			sprite.graphics.endFill();
			format.color = 0xFFFFFF;
			txt.setTextFormat(format);  			
		}
 
 
	}//class
}//package
В проектировании приложений очень помогает создание схем классов, их взаимодействие. Не ленитесь чертить схемки. Даже если вы один задействованы в проекте. В последствии, если придется вернуться к проекту, вспомнить, как в нем всё устроено, благодаря схемам, будет на много проще.
..и конечно же
Почаще слушайте человека с ником Wolsh, плохого никогда не посоветует
Вложения
Тип файла: zip src.zip (8.5 Кб, 32 просмотров)


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

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

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


 


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


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