Macromedia Flash非公式テクニカルノート コンポーネントに続けてButtonを連続クリックするとイベントが発生しない
Platform: All 問題 ComboBoxの設定は問いません。項目のない空の状態でも、現象は再現します。ComboBoxクリックをして、ButtonまたはMovieClipインスタンスをクリックすると、最初のマウスイベントは発生します。しかし、マウスポインタを動かさずに連続クリックすると、2回目以降のマウスクリックのイベント(onReleaseまたはon (release))がインスタンスに渡されないようです。 図001■ComboBoxをクリックしてからButtonを連続クリックするとボタンイベントが発生しない インスタンスに設定するスクリプトは、on ()イベントハンドラアクションでもonReleaseやonPressなどのイベントハンドラメソッドでも変わりははありません。インスタンスに対するマウスクリックのイベントが、発生しなくなるようです[*1]。
原因 ComboBoxをクリックした後、ButtonやMovieClipをクリックすると、そのインスタンスに一瞬フォーカスが移って、すぐにComboBoxに戻ってしまいます。そのためロールオーバーとロールアウトのイベントが連続して生じるのみで、マウスクリックのイベントが発生しません。UI ComponentsのButtonコンポーネントを使用すれば、フォーカスは正しく移動します。 対処法 もうひとつの方法として、ActionScript定義済みのButtonやMovieClipインスタンスを用いる場合には、FocusManager.setFocus()メソッドで明示的にフォーカスを移すことが考えられます。フォーカスを確認したい場合には、FocusManager.getFocus()メソッドを用います。 つぎのButtonアクションは、クリックするとfocusManager.setFocus()メソッドで、Buttonインスタンスにフォーカスを移します(スクリプト001)。なお、Buttonインスタンスmy_btnは、メインタイムラインに配置してあるものとします。 スクリプト001■FocusManager.setFocus()でフォーカスを移す
スクリプト001をButtonアクションに設定して、[ムービープレビュー]を実行し、ComboBoxをクリックしたうえでButtonインスタンスを連続クリックすると、[出力]パネルにはつぎのような結果が表示されます。ComboBoxインスタンスは、_root.my_cbです。
_level0.my_btn _level0.my_btn ...[以下同じ]... 最初ComboBoxインスタンスにあったフォーカスが、FocusManager.setFocus()メソッドによりButtonインスタンスに移動し、連続クリックしてもマウスイベントがButtonに正しく渡ります。ただし、フォーカスが移動すると、インスタンスの周囲に黄色のフォーカス矩形が表示されます(図002)。フォーカス矩形は,マウスポインタを動かせば、表示が消えます。 図002■Buttonインスタンスの周囲に表示されたフォーカス矩形 フォーカス矩形を表示したくないときは、インスタンスのButton._focusrect(MovieClipの場合にはMovieClip._focusrect)プロパティをfalseに設定します。 スクリプト002■Button._focusrectプロパティでフォーカス矩形を非表示にする
_____ 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||||||