2011-09-08 9 views

答えて

1

実際にあなたが求めていることは分かりません。私の提案があなたのための権利でないなら、私を許してください。あなたが書く場合は、

trace(event.target) 

が表示されます。ボタンのインスタンスの完全な名前が表示されます。あなたはこのような非常に単純な再帰関数を使用することができます

0

あなたはそれが次のようなことを言いたいと推測しています: "ボタンをクリックしました!"ボタンを押すたびにコンソールに入るのですか?

トレース( "Section1.btnback was clicked!");

私は信じています。 -Expandedがmeddlingwithfireが3lionzの答えの彼のコメントで提案されているようにあなたが「完全なパスを」したい場合は、あなたが使用することができます

+0

私はこのようなものを探しています:** trace(event.currentTarget.name)** - 問題はこれが私に "btnback"を与えるだけですが、ボタンへの完全なパスが必要です。 – Uli

+0

こちらを試してください:http://www.actionscript.org/forums/showthread.php3?t=142581またはこちら:http://stackoverflow.com/questions/4680323/help-me-to-find-out-the- object-path-in-flash – 3lionz

+0

表示リストを「完全なパス」として取得するように求められていますか? – meddlingwithfire

0

below-コメントで

(あなたが求めていたものを実際に確認されませんでした)私はあなたのためにそれを行うクラスを作成しました。クラスはDOPath(表示オブジェクトのパスの略)と呼ばれます。

Main.as(文書クラス):

package 
{ 
    import com.example.display.DOPath; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Main extends Sprite 
    { 
     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 

     }// end function 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var container1:Sprite = new Sprite(); 
      container1.name = "container1"; 

      var container2:Sprite = new Sprite(); 
      container2.name = "container2"; 

      var square:Square = new Square(); 
      square.name = "square"; 
      square.addEventListener(MouseEvent.CLICK, onSquareClick); 

      addChild(container1); 
      container1.addChild(container2); 
      container2.addChild(square); 

     }// end function 

     private function onSquareClick(e:MouseEvent):void 
     { 
      var square:Square = e.target as Square; 

      var doPath:DOPath = new DOPath(square); 
      trace(doPath); // output: stage.root1.container1.container2.square 

     }// end function 

    }// end package 

}// end package 

import flash.display.Sprite; 

internal class Square extends Sprite 
{ 
    public function Square() 
    { 
     graphics.beginFill(0xFF0000); 
     graphics.drawRect(0, 0, 100, 100); 
     graphics.endFill(); 

    }// end function 

}// end class 

DOPath.as

package com.example.display 
{ 
    import flash.display.DisplayObject; 
    import flash.display.DisplayObjectContainer; 
    import flash.display.Stage; 

    public class DOPath 
    { 
     private var _parents:Vector.<DisplayObjectContainer>; 
     private var _d:DisplayObject; 

     public function DOPath(d:DisplayObject):void 
     { 
      _d = d; 

      init(); 

     }// end function 

     private function init():void 
     { 
      _parents = new Vector.<DisplayObjectContainer>; 

      pushParent(_d); 

     }// end function 

     private function pushParent(d:DisplayObject):void 
     { 
      if(d.parent) 
      { 
       _parents.push(d.parent); 
       pushParent(d.parent); 

      }// end if 

     }// end function 

     public function toString():String 
     { 
      var path:String = _d.name; 

      for (var i:uint = 0; i < _parents.length; i++) 
      { 
       var name:String = (_parents[i] is Stage) ? "stage" : _parents[i].name; 
       path = name + "." + path; 

      }// end for 

      return path; 

     }// end function 

    }// end class 

}// end package 
それの例では、表示オブジェクトの完全なパスを取得するために使用されている以下の
0

private function getDOname(dob : DisplayObject) : String 
{ 
    var result : String = dob.name; 

    if (dob is UIComponent) 
    { 
     result = UIComponent(dob).id; 
    } 

    if(dob.parent && dob.parent is DisplayObjectContainer) 
    { 
     result = getDOname(dob.parent) + "." + result; 
    } 

    return result; 
} 

あなたは関数にevent.targetを渡すと、クリックされたボタンを取得することができます。デバッグの目的でこれらのテクニックを使用している場合は、実際にクリックしているビジュアルエレメントが不明な場合は、クリックイベントのイベントリスナーをステージまたはSandboxRoot自体に追加するだけです。

関連する問題