Flashhilfe.de - Flash Community

addEventListener Methode einen Wert übergeben [Flash 9]

 


AntwortenRegistrieren Seite1 2  

Grauzone#1
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

15.10.2008, 15:21

Hallo,

Ich habe Buttons die dynamisch erzeugt werden durch eine for-Schleife
auf denen ist ein EventListener:

ActionScript:
1can1.getChildByName("kreis"+i).addEventListener(MouseEvent.CLICK, onClickCircle);


ich möchte der onClickCircle Methode einen Wert übergeben nämlich das "i" aus der for-Schleife. Geht das?

ActionScript:
1
2
3
4
private function onClickCircle(event:MouseEvent):void{
            trace(i);
}



Sorry ich weiss nicht obs in dieses Forum gehört ..ich arbeite halt in Flex... das steht im <mx:Script> Block  und can1  = ein <mx:Canvas> evtl. ist das der Bezug zu Flex :)
Geändert von Grauzone am 15.10.08 um 15:26 Uhr
rendner#2
Benutzerbild von rendner
Beiträge: 1016
Wohnort: derzeit München
Registriert: Jul 2004

15.10.2008, 15:34

Das "i" ist ja im Namen des Objektes dabei, somit kannst du das auch wieder "herausschneiden". An den Namen kommst du so:
ActionScript:
1
2
3
private function onClickCircle(event:MouseEvent):void{
            trace( DisplayObject( event.target ).name );
}
rendner
Grauzone#3
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

15.10.2008, 15:48

wie meinst du rausschneiden?
rendner#4
Benutzerbild von rendner
Beiträge: 1016
Wohnort: derzeit München
Registriert: Jul 2004

15.10.2008, 15:49

Die Klasse String mal angucken, speziell "substr".
rendner
Geändert von rendner am 15.10.08 um 15:50 Uhr
badskill#5
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

15.10.2008, 15:51

Kleine Frage für zwischendurch. Wozu brauchst du das i?
Grauzone#6
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

15.10.2008, 15:51

ach so .... ist das nicht zu brachial? das ist ja total aufwendig? Ich könnte mir vorstellen das man das öfters braucht muss man da jedesmal "rausschneiden"

Das problem ist das ich nicht das "i" bekomme sondern

ActionScript:
1
2
3
4
// Trace
instance612
instance320
instance904


und mein i ist ne Schleife von 0  - 12.
Grauzone#7
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

15.10.2008, 15:54

ich hab da ein Coverflow ... das über ne Schleife initialisiert wird.

die Schleife gibt die Seiten an  das "i" in der For-Schleife sind die Seitennummern.

also z.B.:


ActionScript:
1
2
3
4
5
6
private function onClickCircle(event:MouseEvent):void{

// wenn ich _pageNum eine Feste Größe gebe gehts doch!
mainContent.selectedIndex = _pageNum;   
      
}


mainContent ist ein Custom Modul  mit der ID


Und ich hab Knöpfe die sollen auf diese Seiten zugreifen.... jeder Knopf soll eine Seite ansteuern.  Die Knopfe sind dynamisch erstellt wie schon gesagt ....  irgendwie muss ich doch dem Knopf Event eine externe Variable zuweisen können.

Sorry wenn das schräg klingt ...aber ich bin mir sicher das ich das problem öfters haben werde.
Geändert von Grauzone am 15.10.08 um 16:05 Uhr
badskill#8
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

15.10.2008, 16:27

Wenn ich mich an deinen anderen Beitrag recht entsinne, ist doch das geklickte Objekt vom Typ 'createCircleNavigation'
Somit kannst du doch einfach den Wert i in der Klasse speichern und wieder abrufen.
rendner#9
Benutzerbild von rendner
Beiträge: 1016
Wohnort: derzeit München
Registriert: Jul 2004

15.10.2008, 16:35

>>Das problem ist das ich nicht das "i" bekomme sondern...
Aber nicht in dem trace, wenn der Kreis geklickt wurde?
Da sollte etwas anderes herauskommen, da du ja auch die Kreise per Namen hier ansprichst:
ActionScript:
1can1.getChildByName("kreis"+i).addEventListener(MouseEvent.CLICK, onClickCircle);


Alternativ kannst anstatt den Namen zu zerstückeln, den index in der DisplayList des Objektes abfragen, wenn du nur die Buttons dort drinne hast und den index nicht änderst:
ActionScript:
1
2
3
4
5
6
7
private function onClickCircle(event:MouseEvent):void
{
   var btn:DisplayObject = DisplayObject( event.target );
   var btnContainer:DisplayObjectContainer = DisplayObjectContainer( btn.parent );
   
   trace( "index: " + btnContainer.getChildIndex( btn ) );
}
rendner
Grauzone#10
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

15.10.2008, 16:38

Jo  :) ich bins wieder ....
es gibt halt noch paar Sachen wie blick ich nicht so ganz ....

also  ich hab sowas...
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
for (var i:Number=0; i<event.result.timeline.period.event.length; i++)
         {

[.....]

for(var n:Number = 0; n<=_anzahl; n++) {
            for(var k:Number = 0; k<=9; k++) {
               if(((event.result.timeline.start + (10*n))+k) == (datum.getYear(EventDatum))){
                  kreis = new createCircleNavigation();
                  kreis.name = "kreis" +i;
                  kreis.x = ((_abstand2*k)+ (_abstand *n)) -6 ;
                  can1.addChild(kreis);
                  can1.getChildByName("kreis"+i).addEventListener(MouseEvent.CLICK, onClickCircle);
               }
            }
            }

[....]

}

private function onClickCircle(event:MouseEvent):void{
            trace(event.target.name);
            //mainContent.selectedIndex = _pageNum;   
      
      }



die variable speichern klingt gut! aber wie?

ActionScript:
1
2
kreis._pageNum = i;



so???  aber wie ruf ich die dann im onClickCircle() auf?

Dank euch vielmals das ihr mir helft!
Grauzone#11
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

15.10.2008, 16:43

Danke Rendner ..  ich bekomme da bei allen Knöpfen eine 0
Geändert von Grauzone am 15.10.08 um 16:43 Uhr
rendner#12
Benutzerbild von rendner
Beiträge: 1016
Wohnort: derzeit München
Registriert: Jul 2004

15.10.2008, 17:18

Kann eigentlich nicht sein, hier mal ein Beispiel:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package 
{
   import flash.display.*;
   import flash.events.*;
   import flash.text.TextField;
   
   /**
    * ...
    * @author DefaultUser (Tools -> Custom Arguments...)
    */

   public class CircleTest extends Sprite
   {
      private static const CIRCLE_COUNT:int = 12;
      
      private var t:TextField;
      
      public function CircleTest()
      {
         init();
      }
      
      private function init():void
      {
         for( var i:int = 0; i < CIRCLE_COUNT; i++ )
         {
            var c:Sprite = createCircle();
            c.x = i * (c.width + 5);
            
            c.addEventListener( MouseEvent.CLICK, onCircleClick );
            addChild( c );
         }
      }
      
      private function onCircleClick( event:MouseEvent ):void
      {
         var btn:DisplayObject = event.target as DisplayObject;
         var btnContainer:DisplayObjectContainer = btn.parent as DisplayObjectContainer;
         
         trace( "index: " +  btnContainer.getChildIndex( btn ) );
      }
      
      private function createCircle():Sprite
      {
         var c:Sprite = new Sprite();
         c.graphics.beginFill( 0xFF0000 );
         c.graphics.drawCircle( 0, 0, 10 );
         c.graphics.endFill();
         
         return c;
      }
   }
}
rendner
Grauzone#13
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

16.10.2008, 11:55

Hi Rendner,

ich hab deinen Code getestet ... er funzt ... bei mir funzt er nicht, aber ich denke das liegt an meinem Klassen hin und her...

Ich danke dir aufjedenfall für dieses Beispiel. Nun weiss ich das es funzen kann und werde mal dementsprechend mal mein Zeug überarbeiten.

ich lass das mal noch unbeantwortet, evtl. hab ich wieder ne Frage dazu :-)
omega psi#14
Benutzerbild von omega psi
Beiträge: 791
Registriert: Apr 2004

17.10.2008, 08:31

Also wenn du in Flex eh schon arbeitest: Referenziere alle Buttons in einer ArrayCollection, und wenn sie geklickt werden, holst du dir den index - dein 'i' - aus der ArrayCollection wieder raus.
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version="1.0" encoding="utf-8"?>
<mx:Application initialize="eventListener(event)" layout="absolute"
      xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:Script>
      <![CDATA[
         import mx.core.UIComponent;
         import mx.collections.ArrayCollection;
         import mx.events.FlexEvent;

         [Bindable]
         private var _circles:ArrayCollection

         private function eventListener(event:Event):void {
            switch(event.type) {
               case FlexEvent.INITIALIZE:
                  this._circles = new ArrayCollection();
                  for (var index:int = 0; index < 10; index++) {
                     var circle:UIComponent = new UIComponent();
                     circle.addEventListener(MouseEvent.CLICK, eventListener);
                     circle.graphics.beginFill(0, 1);
                     circle.graphics.drawCircle(0, 0, 10);
                     circle.graphics.endFill();
                     circle.x = index * 25;
                     circle.y = index * 25;
                     this.addChild(circle);
                     this._circles.addItem(circle);
                  }
                  break;
               case MouseEvent.CLICK:
                  if (this._circles.contains(event.target)) {
                     trace(this._circles.getItemIndex(event.target));
                  }
                  break;
            }
         }
      ]]>
   </mx:Script>
</mx:Application>
Nebeneffekt: du kannst du Circles auch aus der DisplayList entfernen und behälst trotzdem die richtige Reiehenfolge.
Architectures - Refactoring - Prototyping - Coding - Training
Grauzone#15
Benutzerbild von Grauzone
Beiträge: 51
Wohnort: München
Registriert: Nov 2007

Themenautor/in

17.10.2008, 11:55

Hallo ich bins immernoch :(  sorry

also es gehen alle beispiele... ich danke euch vielmals ...

Aber leider gehts in meinem Fall konkret nicht, dann ich habe eine for-Schleife mehr und die scheint wohl das ganze durcheinander zu bringen..

ich habe das hier durch eure netten Beispiele:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[Bindable]
        private var _circles:ArrayCollection

[...]
this._circles = new ArrayCollection();
            
            for(var n:Number = 0; n<=_anzahl; n++) {

                     
                     var c:UIComponent = new UIComponent();
                        c.graphics.beginFill(0x343436);
                          c.graphics.lineStyle(3,0x8fbe08);
                          c.graphics.drawCircle(0, 0, 5);
                          c.graphics.endFill();
                          c.y = 8;
                          c.buttonMode = true;
                        c.x = ((_abstand2*k)+ (_abstand *n)) -2 ;
                        c.addEventListener( MouseEvent.CLICK, onCircleClick );
                        can0.addChild(c);
                        this._circles.addItem(c);
                     
               
             }
[..]

private function onCircleClick( event:MouseEvent ):void
      {
        if (this._circles.contains(event.target)) {
                    trace(this._circles.getItemIndex(event.target));  // trace wie gewünscht  index: 1; index: 2 ....
                  }
      }


ich bräuchte aber das hier:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Bindable]
        private var _circles:ArrayCollection

[..]

this._circles = new ArrayCollection();
            
            for(var n:Number = 0; n<=_anzahl; n++) {
               for(var k:Number = 0; k<=9; k++) {
                  if(((event.result.timeline.start + (10*n))+k) == datum.getYear(EventDatum)){
                     
                     var c:UIComponent = new UIComponent();
                        c.graphics.beginFill(0x343436);
                          c.graphics.lineStyle(3,0x8fbe08);
                          c.graphics.drawCircle(0, 0, 5);
                          c.graphics.endFill();
                          c.y = 8;
                          c.buttonMode = true;
                        c.x = ((_abstand2*k)+ (_abstand *n)) -2 ;
                        c.addEventListener( MouseEvent.CLICK, onCircleClick );
                        can0.addChild(c);
                        this._circles.addItem(c);
                     
                  }
               }
             }

[..]
private function onCircleClick( event:MouseEvent ):void
      {
        if (this._circles.contains(event.target)) {
                    trace(this._circles.getItemIndex(event.target)); // Trace  index: 0  bei allen Kreisen
                  }
      }


wenn ich wie schon oben die for-Schleife k entferne dann gehts...  ich brauche aber die k for-Schleife :(

Ach @rendner deine Version läuft genau so :(
Geändert von Grauzone am 17.10.08 um 12:24 Uhr
omega psi#16
Benutzerbild von omega psi
Beiträge: 791
Registriert: Apr 2004

17.10.2008, 12:51

Und wieso brauchst du den Index überhaupt? Was hast du damit vor?

Und mein Code ist korrekt...
Architectures - Refactoring - Prototyping - Coding - Training
Geändert von omega psi am 17.10.08 um 12:52 Uhr

AntwortenRegistrieren Seite1 2  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de