|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2010
Сообщений: 3
|
Как обратиться к свойству объекта TextField из класса кнопки
На объекте главной формы(mainForm.as) лежит объект кнопка (myButton.as) и экземпляр динамического текста (txt)
Как из класса myButton.as(при событии клик по кнопке) изменить свойство text экземпляра txt??? txt - в свою очередь создается в mainForm.as, оператором new В Actionscript 2.0 я обращался через _рут.. В делфи подключается в uses и все свойства становятся доступными.. ну подскажите, пожалуйста, как обращаться к сторонним объектам в АС 3.0 всю документацию перерыл нету ничего, помогите господа. Последний раз редактировалось peromax; 11.10.2010 в 18:12. |
|
|||||
Регистрация: Oct 2010
Адрес: PNZ
Сообщений: 20
|
Я бы сделал так:
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. |
|
|||||
Регистрация: Oct 2010
Сообщений: 3
|
Спасибо за ответ, но это не совсем то. В одном файле обращаться у меня получается, а вот когда в разных... У меня есть класс кнопки(отдельный файл *.ас) в котором определены функции и листерны и отдельный файл мэйнФорм.ас в котором вызывается конструктор этой кнопки, и конструктор тхт. Можно ли в такой ситуации обратиться из класса кнопки к свойству текста? Или нужно именно что бы кнопка обрабатывала листерны для текста в одном файле ?
Последний раз редактировалось peromax; 12.10.2010 в 00:40. |
|
|||||
Регистрация: Oct 2010
Адрес: PNZ
Сообщений: 20
|
Я, конечно, могу ошибаться, но если вы не преследуете какой-то определенной цели данным требованием, то лучше все-таки назначать обработчик действий на месте. По вашему вопросу - можно в кнопку передавать ссылку на текстовое поле и в кнопке изменять текст, можно при нажатии на кнопку высылать кастомное событие, в котором передавать необходимый текст, ловить его в вашей форме и в ней менять текст, можно передавать функцию главной формы в кнопку, которая будет вызываться при нажатии на нее... можно придумать еще 100 и один способ, но зачем? listeners в классе вашей кнопки нужны скорее для того, чтобы менять графическое ее состояние при нажатии, или обрабатывать какие-то специфические функции, присущие этой кнопке. Если вы тесно свяжете кнопку с текстовым полем - то будет весьма проблематично использовать ее повторно для других целей.
|
|
|||||
Регистрация: Oct 2010
Сообщений: 3
|
Спасибо огромное, я просто новичок в АС 3.0 наверное вы правы.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Советую почитать что-нибудь про ООП. Некоторые вещи сложны при первом знакомстве, но есть очень полезные концепции, помогающие связно думать и строить проект, прежде всего взаимодействия. Кратко так - у каждого объекта должна быть своя простая миссия. Кнопка просто нажимается, поле просто выводит текст, в основном классе - логика. Когда кнопка инкапсулирована, ей не надо ничего вообще знать о том, что происходит вовне. Она просто нажимается и посылает событие что ее нажали, всё. Такую кнопку Вы можете использовать где угодно и как угодно, а проект превращается в подобие конструктора, собираясь из отдельных деталек. Основному классу не обязательно знать об оверСтейте кнопки, ему нужны только события кнопки. Кнопке не надо знать, что произойдет когда ее кликнут, а тем более - что где-то есть какое-то поле, в которое надо передать какой-то текст... Это же просто кнопка! Зачем пихать в нее логику самого приложения?)))
__________________
Reality.getBounds(this); |
|
|||||
Вдохновившись сообщением от Wolsh, сваял вот такой примерчик
Main 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 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); //отправили данные манагерТексту } } } 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 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 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 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, плохого никогда не посоветует Последний раз редактировалось KiL33; 12.10.2010 в 14:34. |
Часовой пояс GMT +4, время: 08:49. |
|
« Предыдущая тема | Следующая тема » |
|
|