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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     Delegateクラスを用いたリスナー登録の解除ができない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hs_jin
Åê¹ÆNo.10674
投稿日時: 2004-9-8 13:59
新米
居住地:
投稿: 24
使用環境:
Win2000 IE6.0
FlashMXPro2004 7.2
FlashPlayer7
FlashRemotingMX
Delegateクラスを用いたリスナー登録の解除ができない
こんにちは、hs_jinです。

Delegateクラスを用いて、イベントを登録しているのですが、
その解除方法が分からなく、投稿しました。

私が試したことは、以下のとおりです。
なお、シーン1フレーム1のみで、ステージにはButtonコンポーネントが
「button」というインスタンス名で配置しており、
アクションスクリプトはステージに記述しています。
import mx.utils.Delegate;

button.addEventListener("click", Delegate.create(this, click));

function click()
{
  button.removeEventListener("click", Delegate.create(this, click));
  trace("click");
}

このコードで、2回以上のクリックでは「click」が出力されない
ことを期待したのですが、ボタンを何度クリックしても
「click」と出力されてしまいます。
また、
import mx.utils.Delegate;

button.addEventListener("click", Delegate.create(this, click));

function click()
{
  button.removeEventListener("click", this);
  trace("click");
}

としても結果は変わりませんでした。

ヘルプには方法が記されていなかったので、できないことかもしれません。
とにかくはっきりしたことが欲しいので、「できる」、「できない」
だけでもご存知の方、いましたらご教授お願いいたします。
野中文雄
Åê¹ÆNo.10675
投稿日時: 2004-9-8 14:58
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Delegateクラスを用いたリスナー登録の解除ができない
登録した本人を削除しないと、該当者が見当たらないということになります。
引用:
hs_jinさんは書きました:
なお、シーン1フレーム1のみで、ステージにはButtonコンポーネントが
「button」というインスタンス名で配置しており、
アクションスクリプトはステージに記述しています。
import mx.utils.Delegate;
var fDelegate:Function = Delegate.create(this, click);
trace(fDelegate);  // 出力: [type Function]

// button.addEventListener("click", Delegate.create(this, click));
button.addEventListener("click", fDelegate);
function click()
{
  // button.removeEventListener("click", Delegate.create(this, click));
  button.removeEventListener("click", fDelegate);
  delete fDelegate;
  trace("click");
}

このコードで、2回以上のクリックでは「click」が出力されない
ことを期待したのですが、ボタンを何度クリックしても
「click」と出力されてしまいます。


----------------
 

hs_jin
Åê¹ÆNo.10676
投稿日時: 2004-9-8 15:16
新米
居住地:
投稿: 24
使用環境:
Win2000 IE6.0
FlashMXPro2004 7.2
FlashPlayer7
FlashRemotingMX
Re: Delegateクラスを用いたリスナー登録の解除ができない
野中さん、返信ありがとうございます。

なるほど、あらかじめ関数を定義しておかなくてはならないのですね。

引用:

野中文雄さんは書きました:
import mx.utils.Delegate;
var fDelegate:Function = Delegate.create(this, click);
trace(fDelegate);  // 出力: [type Function]

// button.addEventListener("click", Delegate.create(this, click));
button.addEventListener("click", fDelegate);
function click()
{
  // button.removeEventListener("click", Delegate.create(this, click));
  button.removeEventListener("click", fDelegate);
  delete fDelegate;
  trace("click");
}



これで、安心してDelegateクラスを使えそうです。
ありごとうございました。
野中文雄
Åê¹ÆNo.10677
投稿日時: 2004-9-8 15:46
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Delegateクラスを用いたリスナー登録の解除ができない
今後も出てきそうなご質問のように思いましたので、私のノート「イベントの委譲 (Delegateクラス)」にも追加しておきました([*3])。


----------------
 

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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