�T�C�g�g�b�v

Director Flash ���� �Ɩ����e �v���t�B�[��

Macromedia Flash������e�N�j�J���m�[�g

�C�x���g�̈Ϗ� (Delegate�N���X)

ID: FN0408001 Product: Flash

Platform: All
Version: Flash MX Professional 2004 7.2

Delegate�N���X���X�N���v�g��N���X��import����ƁA�C�x���g�����̃X�R�[�v�Ɗ֐����Ϗ�(delegate)���邱�Ƃ��ł��܂��B�V���^�b�N�X�́A�‚��̂Ƃ���ł��B

import mx.utils.Delegate;
compInstance.addEventListener(�C�x���g��, Delegate.create(�X�R�[�v�I�u�W�F�N�g, �֐�));

�����X�R�[�v�I�u�W�F�N�g�́A�����Ɏw�肵���֐����ďo���X�R�[�v����肵�܂��B

Delegate.create()�̌ďo���ɂ́A��ʂɂӂ��‚̎g����������܂��B

  • ����̃C�x���g���A�قȂ�ӂ��‚̊֐��ɑ���܂��B
    �ڂ����́A��q�u1. �C�x���g�̊֐��ւ̈Ϗ��v�����Q�Ƃ��������B

  • �֐������̒�`���ꂽ�X�R�[�v�Ōďo���܂��B
    �֐���addEventListener()�̈����Ƃ��ēn���ƁA���̊֐��̓��b�Z�[�W��z�M����R���|�[�l���g�C���X�^���X�̃X�R�[�v�Ŏ��s����[*1]�A�֐����`�����I�u�W�F�N�g�̃X�R�[�v�ł͌ďo����܂���B�ڂ����́A��q�u2. �֐��̃X�R�[�v�̈Ϗ��v�����Q�Ƃ��������B

[*1]addEventListener()���\�b�h�̑�2�����Ɋ֐����w�肷��ƁA���X�i�[�֐��̓C�x���g��z�M����R���|�[�l���g�C���X�^���X�̃X�R�[�v�Ōďo����܂��B�ȉ��̃T���v���X�N���v�g�ł́A���X�i�[�֐�clickHandler��Button�R���|�[�l���g�C���X�^���Xmy_btn�̃X�R�[�v�Ōďo�����̂ŁA�֐��u���b�N({})����this��my_btn���Q�Ƃ��܂��B���������āAthis���Q�Ƃ��ă^�C�����C����̃v���p�e�B�ɃA�N�Z�X���悤�Ƃ���΁Aundefined���Ԃ���܂��B

// [�o��]�p�l���̕\��
_level0.my_btn,undefined,_level0.my_btn

// _root: �t���[���A�N�V����
// Button�R���|�[�l���g�C���X�^���Xmy_btn��z�u
import mx.controls.Button;
var my_btn:Button;
var nMyProperty:Number = 1;
function clickHandler(eventObject) {
  trace([this, this.nMyProperty, eventObject.target]);
}
my_btn.addEventListener("click", clickHandler);

�����Ƃ��A�^�C�����C����ł���΁Athis���Q�Ƃ����f�t�H���g�Q�����g�����ƂőΉ��ł��܂��B���ۂɖ��ɂȂ�̂́A��q�u2. �֐��̃X�R�[�v�̈Ϗ��v�̂悤�ɃN���X�Ń��\�b�h(�֐�)�����X�i�[�Ɏw�肵�����ꍇ�ł��傤�B

1. �C�x���g�̊֐��ւ̈Ϗ�
Delegate.create()�̌ďo�����L���Ȃ̂́A�ӂ��‚̃R���|�[�l���g�������āA����炪�����̃C�x���g��z�M����ꍇ�ł��B���Ƃ��΁ACheckBox��Button�R���|�[�l���g������Aswitch�X�e�[�g�����g���g����eventObject.target�v���p�e�B����擾�����������ƂɁA�ǂ���̃R���|�[�l���g��click�C�x���g��z�M�����̂����肵�����Ƃ��܂��B

�ȉ��̃R�[�h�������ɂ́AmyCheckBox_chb�Ƃ������O��CheckBox��myButton_btn�Ƃ������O��Button�R���|�[�l���g�C���X�^���X���A���ꂼ��X�e�[�W�ɔz�u���܂��B�ӂ��‚̃C���X�^���X��I�����A[F8]�L�[��������[�V���{���ɕϊ�]���܂��B�_�C�A���O�{�b�N�X��[��{]�\���ł�����[�ڍ�]���N���b�N���A[ActionScript�ɏ��o��]���`�F�b�N���������ŁA[AS 2.0�N���X]�ɃN���X���uCart�v����͂��܂��B�V�����V���{���̃C���X�^���X�ɂ́A�C�ӂ̃C���X�^���X����[�v���p�e�B�C���X�y�N�^]�Őݒ肵�܂��B���̃V���{����Cart�N���X�Ɋ֘A�Â����A�C���X�^���X��Cart�N���X�̃C���X�^���X�ɂȂ�܂��B

// import mx.utils.Delegate;  // [*2]
import mx.controls.Button;
import mx.controls.CheckBox;
class Cart {
  var myCheckBox_chb:CheckBox;
  var myButton_btn:Button;
  function onLoad() {
    myCheckBox_chb.addEventListener("click", this);
    myButton_btn.addEventListener("click", this);
  }
  function click(eventObj:Object) {
    switch (eventObj.target) {
    case myButton_btn :
      // ���b�Z�[�W��z�M����C���X�^���X����
      // �C�x���g�^�C�v��[�o��]�p�l���ɕ\��
      trace(eventObj.target+":"+eventObj.type);
      break;
    case myCheckBox_chb :
      trace(eventObj.target+":"+eventObj.type);
      break;
    }
  }
}


[*2]�����ɂ͂���improt�X�e�[�g�����g�̋L�q������܂��B�������ADelecate�N���X�͎g�p���Ă��܂���̂ŁA�s�v�ł��B

�ȉ��́A�����N���X�t�@�C��(Cart.as)�ɑ΂��āADelegate���g�p���邩�����ɏC���������̂ł��B

import mx.utils.Delegate;
import mx.controls.Button;
import mx.controls.CheckBox;
class Cart {
  var myCheckBox_chb:CheckBox;
  var myButton_btn:Button;
  function onLoad() {
    myCheckBox_chb.addEventListener("click", Delegate.create(this, chb_onClick));
    myButton_btn.addEventListener("click", Delegate.create(this, btn_onClick));  // [*3]
  }
  // ����̃C�x���g����������قȂ����ӂ��‚̊֐�
  function chb_onClick(eventObj:Object) {
    // ���b�Z�[�W��z�M����C���X�^���X����
    // �C�x���g�^�C�v��[�o��]�p�l���ɕ\��
    trace(eventObj.target+":"+eventObj.type);
    // FLA�t�@�C���̂Ȃ���Cart�N���X���֘A�Â���ꂽ�V���{����
    // �C���X�^���X�ւ̐�΃p�X��[�o��]�p�l���ɕ\��
    trace(this);
  }
  function btn_onClick(eventObj:Object) {
    trace(eventObj.target+":"+eventObj.type);
    trace(this);
  }
}


[*3]Delegate�N���X���g���č쐬�E�o�^�������X�i�[���A�C�x���g��z�M����C���X�^���X����폜����ɂ́A�\�߃��X�i�[�ւ̎Q�Ƃ��擾���Ă����K�v������܂��B�Ȃ��ADelegate.create()���\�b�h�́A�֐�(Function�^�f�[�^)��Ԃ��܂��B

// ActionScript 2.0�N���X��`�t�@�C��: Cart.as
// Button�R���|�[�l���g�C���X�^���XmyButton_btn��z�u
import mx.utils.Delegate;
import mx.controls.Button;
class Cart {
  var myButton_btn:Button;
  var myDelegateFunc:Function;
  function onLoad() {
    myDelegateFunc = Delegate.create(this, btn_onClick);
    myButton_btn.addEventListener("click", myDelegateFunc);
  }
  function btn_onClick(eventObj:Object) {
    trace(eventObj.target+":"+eventObj.type);
    myButton_btn.removeEventListener("click", myDelegateFunc);
    trace(this);
  }
}

2. �֐��̃X�R�[�v�̈Ϗ�
addEventListener()���\�b�h�ɂ́A�ӂ��‚̈���������܂��B�C�x���g���ƃ��X�i�[�ւ̎Q�Ƃł��B���X�i�[�́A�I�u�W�F�N�g���֐��̂����ꂩ�ɂȂ�܂��B�I�u�W�F�N�g��n���ƁA�I�u�W�G�N�g�ɐݒ肳�ꂽ�R�[���o�b�N�֐����A�I�u�W�F�N�g�̃X�R�[�v�Ŏ��s����܂��B�������A�֐����n�����ƁA�֐���addEventListener()���\�b�h���ďo�����R���|�[�l���g�C���X�^���X�̃X�R�[�v�Ŏ��s����邱�ƂɂȂ�܂��B�ڂ����́A�u���X�i�[���̃X�R�[�v�ɂ‚��āv�����Q�Ƃ��������B

�֐��̓C�x���g��z�M����C���X�^���X�̃X�R�[�v�Ŏ��s�����̂ŁA�֐��{�̂�this�L�[���[�h�͂��̃C�x���g�z�M�C���X�^���X���Q�Ƃ��邱�ƂɂȂ�܂��B���������āA�֐����������ꂽ�N���X�̃v���p�e�B�⃁�\�b�h�ɂ̓A�N�Z�X�ł��܂���BDelegate�N���X���g���ƁA�֐��̃X�R�[�v���A���̊֐����������ꂽ�N���X�ɈϏ����邱�Ƃ��ł��܂��B����ƁA���̊֐���錾�����N���X�̃v���p�e�B�⃁�\�b�h�ɃA�N�Z�X���邱�Ƃ��”\�ɂȂ�܂��B

�ȉ��̃T���v���́A�O�߁u�C�x���g�̊֐��ւ̈Ϗ��v�Ɠ������e�ŁACart.as�N���X�t�@�C�����قȂ�X�^�C���ɂ��܂����B

import mx.controls.Button;
import mx.controls.CheckBox;
class Cart {
  var myCheckBox_chb:CheckBox;
  var myButton_btn:Button;
  // chb_onClick�֐�����A�N�Z�X����ϐ����`
  var i:Number = 10;
  function onLoad() {
    myCheckBox_chb.addEventListener("click", chb_onClick);
  }
  function chb_onClick(eventObj:Object) {
    // �ϐ�i�ɃA�N�Z�X����10���o�͂ł���悤�Ɏv���܂�
    // ������[�o��]�o�l���ɂ�undefined���\������܂�
    // �֐��̃X�R�[�v��i���`����Cart�C���X�^���X�ł͂Ȃ�����ł�
    trace(i);
  }
}

Cart�N���X�̃v���p�e�B�ƃ��\�b�h�ɃA�N�Z�X�ł���悤�ɂ���ɂ́A�‚��̂悤��Delegate.create()���ďo����addEventListener()�̑�2�����Ɏw�肵�܂��B

import mx.utils.Delegate;
import mx.controls.Button;
import mx.controls.CheckBox;
class Cart {
  var myCheckBox_chb:CheckBox;
  var myButton_btn:Button;
  // chb_onClick�֐�����A�N�Z�X����ϐ����`
  var i:Number = 10;
  function onLoad() {
    myCheckBox_chb.addEventListener("click", Delegate.create(this, chb_onClick));
  }
  function chb_onClick(eventObj:Object) {
    // [�o��]�o�l���ɂ�10���\������܂�
    // �֐��̃X�R�[�v��Cart�C���X�^���X�Ɏw�肳��Ă��邩��ł�
    trace(i);
  }
}

�o�T
Flash MX 2004 7.2-E [Help] > [Using Components] > [Handling Component Events] > [Delegating events]���M��B

_____

�쐬��: �쒆���Y
�X�V��: 2004�N9��8�� ��Ғ�[*3]��lj�
�쐬��: 2004�N8��5��


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.
�@ �@