0

CS3(AS2)プロジェクトに標準のFlashComboBoxコンポーネントを追加しました。これは私のライブラリシンボルの一部であり、ステージ上では作成されません。

ComboBoxのスキニングやソースコードなどは変更していません。

ユーザーがComboBoxをクリックすると、リストがドロップダウンし、ユーザーはマウスを使用してアイテムを選択し、そのアイテムはそれに作用するコードに渡されます。

Flash IDEでは、すべてが正常に機能します。しかし、これをWebサイトに展開し、Webブラウザーを介してFlashページを表示すると、ユーザーがドロップダウンリストの値をクリックすると、別の値が選択され、入力ボックスに表示されます。(私はMACでFirefox 3.0.12を使用していますが、QAでは他のブラウザーやバージョンで問題が発生しています)。これと同じ誤った値が、変更イベントのコールバックにも渡されます。

この問題は、FlashPlayer9および10で明らかです。

ComboBoxから値を取得する2つの方法を試しました。

a)コンポーネントに直接アクセスして選択を取得します。このアプローチを使用する場合、ユーザーがキーボードを使用して値を選択するか、数値を直接入力すると、IDEとブラウザーで機能します。マウスの選択のみが失敗します。

   var num_pages_value:Number = Number(num_pages.num_pages_cb.selectedItem["data"]);

b)イベントハンドラーを使用します。このアプローチを使用すると、ComboBoxへのキーボードアクセスが機能しなくなります。イベントハンドラーの設定方法は次のとおりです。

var cb:ComboBox = num_pages.num_pages_cb;

// mx.events.EventDispatcher.initializeがないと、変更イベントが発生することはありません!!!
//ドキュメントにはありません。これを見つけるのはとても難しいようでした...mx.events.EventDispatcher.initialize(cb); cb.addEventListener( "change"、this);

これがイベントハンドラー自体です。

関数change(evt){num_pages_value = Number(evt.target.selectedItem.label); }

mx.events.EventDispatcher.initializeの呼び出しがキーボードの相互作用を壊すものだと思いますが、それがないとハンドラーは呼び出されません。ただし、どちらのアプローチでも、ユーザーは必要な値を選択できません。7を選択すると9が得られ、3を選択すると6が得られます。また、得られる値は毎回同じではありません。

4

1 に答える 1

0

問題を再現しようとしています。

これまでのところ、簡単なテストでうまくいきました。

これが私のコードです:

import mx.controls.ComboBox;
import mx.controls.Label;

var cb:ComboBox = this.createClassObject(ComboBox,'cb',0);
for(var i:Number = 0 ; i < 10 ; i++) cb.addItem({label:'item'+(i+1)});

var l:Label = this.createClassObject(Label,'l',1,{_x:cb.width,text:'selection'});

var listener:Object = new Object();
listener.change = function(event:Object):Void{
 l.text = cb.selectedItem.label;
}
cb.addEventListener('change',listener);

ライブラリに Label と ComboBox がありました。ラベルは、CS3 から生成されたデフォルトの HTML ファイルでマウスを使用して変更します。

このテストでは、以下を使用しました。

  • Flash Player 10,0,32,18 デバッガ
  • Mac OS 10.5.6
  • Firefox 3.5.6 (Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6)

HTH、ジョージ

于 2009-12-31T08:09:42.447 に答える