トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     テキストフィールドにフォーカスが当たらないです。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
wadadanet
Åê¹ÆNo.35954
投稿日時: 2007-11-4 17:59
新米
居住地:
投稿: 25
使用環境:
テキストフィールドにフォーカスが当たらないです。
フォーカスが当てれなくて困っています。
全体の動作はには、マウスクリックした場所にテキストフィールドを生成するっていう
ごく単純なActionScript、テキストフィールドは生成するんですが、フォーカスがあたりません。
たぶん、簡単な間違いをしてると思うのですが。。。

AS3.0ファイル------------------------------------
package {
import flash.utils.*;
import flash.text.*;
import flash.events.TextEvent;
 public class TextChildren extends MovieClip {
  var mytext_field:TextField;
  function addWord( thisM ){
   mytext_field = new TextField();
   mytext_field.x = parseFloat( thisM.x );
   mytext_field.y = parseFloat( thisM.y );
   addChild(mytext_field);
   MovieClip(root).focus = mytext_field;//フォーカスを与える
  }
 }
}

エラーメッセージ----------
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

よろしくお願いします。
nioia321
Åê¹ÆNo.35956
投稿日時: 2007-11-4 20:38
職人
居住地: 東京
投稿: 430
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
MovieClipにfocusプロパティは無かったと思います。
Stage.focusプロパティを使うのはどうでしょうか。

package {
	import flash.utils.*;
	import flash.text.*;
	import flash.events.TextEvent;
	public class TextChildren extends MovieClip {
		var mytext_field:TextField;
		function addWord( thisM ){
			mytext_field = new TextField();
			mytext_field.x = parseFloat( thisM.x );
			mytext_field.y = parseFloat( thisM.y );
			addChild(mytext_field);
			//MovieClip(root).focus = mytext_field;//フォーカスを与える
			stage.focus = mytext_field;
		}
	}
}
wadadanet
Åê¹ÆNo.35959
投稿日時: 2007-11-4 21:32
新米
居住地:
投稿: 25
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
お返事ありがとうございます。

早速、
stage.focus = mytext_field;
で試してみたのですが、下記のようなエラーがでます。

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

mytext_fieldをトレースしたらちゃんと出ました。
[object TextField]

ん?
nioia321
Åê¹ÆNo.35960
投稿日時: 2007-11-4 21:49
職人
居住地: 東京
投稿: 430
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
そうですか…

テストする際はデバッグモードでプレビューすることをお勧めします。
どこでエラーが出ているのか分かりますので。

wadadanetさんの物とは違いますが、
下記をドキュメントクラスにしたら正常に動作しますか?

TextChildren.as
package
{
	import flash.display.*;
	import flash.utils.*;
	import flash.text.*;
	import flash.events.*;
	
	public class TextChildren extends MovieClip
	{
		private var mytext_field:TextField;
		
		function TextChildren()
		{
			stage.addEventListener(MouseEvent.MOUSE_DOWN, addWord);
		}
		
		public function addWord( thisM:MouseEvent ):void
		{
			mytext_field = new TextField();
			mytext_field.type = TextFieldType.INPUT;
			mytext_field.x = thisM.stageX;
			mytext_field.y = thisM.stageY;
			mytext_field.text = "TextField";
			addChild(mytext_field);
			stage.focus = mytext_field;//フォーカスを与える
		}
	}
}
wadadanet
Åê¹ÆNo.35964
投稿日時: 2007-11-5 1:37
新米
居住地:
投稿: 25
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
お返事ありがとうございます。
ソースまで書いてくれるなんて感動です。

新しいファイルを作ったらフォーカスあたりました!!
でも、実際にTextChildren内で同じようにしても同じエラーがでました。

ん?。。
wadadanet
Åê¹ÆNo.35965
投稿日時: 2007-11-5 1:44
新米
居住地:
投稿: 25
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
ニノミヤ カズノリさんのソースを使い
ドキュメントクラスを
package{
import flash.display.*;
import flash.utils.*;
import flash.text.*;
import flash.events.*;
public class main extends MovieClip{

var TextC:TextChildren = new TextChildren;

function main(){
addChild (TextC);
}

}
}

にして、
TextChildrenをニノミヤさんのコードにしてパブリッシュしたところ、同じようなエラーが出ました。
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」

もしかして、子の子にはフォーカスって与える事ができないのですか?
nioia321
Åê¹ÆNo.35974
投稿日時: 2007-11-5 11:58
職人
居住地: 東京
投稿: 430
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
引用:
wadadanetさんは書きました:
ニノミヤ カズノリさんのソースを使い
ドキュメントクラスを
package{
import flash.display.*;
import flash.utils.*;
import flash.text.*;
import flash.events.*;
public class main extends MovieClip{

var TextC:TextChildren = new TextChildren;

function main(){
addChild (TextC);
}

}
}

にして、
TextChildrenをニノミヤさんのコードにしてパブリッシュしたところ、同じようなエラーが出ました。
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」

もしかして、子の子にはフォーカスって与える事ができないのですか?

何度も書きますが、
上のメニューに『ムービーのデバッグ』と言うのがありますのでそちらでテストを行った方が宜しいですよ。
どこが悪いのか一発で分かります。

単純にstageプロパティがnullになっています。
これは表示リストに登録される(addChild)前に参照しているのが原因です。

下記に対策を二通り載せておきます。
ご参考下さい。

1)ステージオブジェクトをコンストラクタの引数に渡す場合

TextChildren.as
package
{
    import flash.display.*;
    import flash.utils.*;
    import flash.text.*;
    import flash.events.*;
    
    public class TextChildren extends MovieClip
    {
        private var mytext_field:TextField;
        
        function TextChildren(stage:Stage)
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, addWord);
        }
        
        public function addWord( thisM:MouseEvent ):void
        {
            mytext_field = new TextField();
            mytext_field.type = TextFieldType.INPUT;
            mytext_field.x = thisM.stageX;
            mytext_field.y = thisM.stageY;
            mytext_field.text = "TextField";
            addChild(mytext_field);
            stage.focus = mytext_field;//フォーカスを与える
        }
    }
}

main.as
package{
    import flash.display.*;
    import flash.utils.*;
    import flash.text.*;
    import flash.events.*;
    public class main extends MovieClip{
        
        var TextC:TextChildren
        
        function main(){
            TextC = new TextChildren(stage);
            addChild (TextC);
        }   
    }
}


2)イベント登録用のメソッドをコンストラクタに書かない場合

TextChildren.as
package
{
    import flash.display.*;
    import flash.utils.*;
    import flash.text.*;
    import flash.events.*;
    
    public class TextChildren extends MovieClip
    {
        private var mytext_field:TextField;
        
        function TextChildren()
        {
        }
        
        public function init():void
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, addWord);
        }
        
        public function addWord( thisM:MouseEvent ):void
        {
            mytext_field = new TextField();
            mytext_field.type = TextFieldType.INPUT;
            mytext_field.x = thisM.stageX;
            mytext_field.y = thisM.stageY;
            mytext_field.text = "TextField";
            addChild(mytext_field);
            stage.focus = mytext_field;//フォーカスを与える
        }
    }
}

main.as
package{
    import flash.display.*;
    import flash.utils.*;
    import flash.text.*;
    import flash.events.*;
    public class main extends MovieClip{
        
        var TextC:TextChildren
        
        function main(){
            TextC = new TextChildren();
            addChild (TextC);
            TextC.init();
        }   
    }
}
wadadanet
Åê¹ÆNo.35992
投稿日時: 2007-11-6 12:55
新米
居住地:
投稿: 25
使用環境:
Re: テキストフィールドにフォーカスが当たらないです。
質問している僕の方が返事遅くなって申し訳ございません。

デバッグの件ですが、他のところで大量にExternalInterface を使用していて、下記のようなエラーがでてデバッグできない状態なんです。

Error: Error #2067: ExternalInterface はこのコンテナで使用できません。ExternalInterface を使用するには、Internet Explorer ActiveX、Firefox、Mozilla 1.7.5 以上、または NPRuntime をサポートするブラウザが必要です。

stageプロパティがnullだったんですね。。。
本当にありがとうございます。
すごい助かります。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops