- ベストアンサー
AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法は?
- AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法について質問があります。現在、コンボボックスの選択肢とは別にテキストをクリックするとフォント名を取得する機能を実装していますが、エラーが発生してしまいます。具体的には、エラー内容が「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」となっています。解決策を教えてください。
- AS3のコンボボックスでテキストのフォント名を取得する方法について質問です。私は現在、コンボボックスの選択肢とは別にテキストをクリックするとそのテキストのフォント名を取得する機能を作成していますが、エラーが発生してしまいます。具体的には、エラー内容が「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」となっています。どのように解決すればいいでしょうか?
- AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法について質問です。コンボボックスの選択肢とは別にテキストをクリックすると、そのテキストのフォント名を取得する機能を作成していますが、エラーが出てしまいます。具体的には、「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」というエラーです。このエラーの原因と解決方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず..., 大きく誤解をされているように思うのですが。。。 combobox_cb.selectedItem.label = ○○; ↑これだと(仮にこれが通用したとしても), コンボボックス「combobox_cb」で選択しているアイテムのラベルが「○○」になってしまうだけですよ。 わかりますでしょうか? 他のものに喩えるなら 「バッター(打者)をAからBに変更する」 のではなくて 「バッター(打者)の名前をAからBに変更する」 みたいな感じになるというか。。。 つまり 「選択アイテム自体を切り替える」のではなくて 「選択されたアイテムのラベルを変える」になってしまうということです。 (場合によっては同名のラベルがどんどん増えていくことになる。) そうではなく, 「選択アイテム自体を切り替える」」のでしたら, selectedItem.label ではなく selectedIndex を変える必要があります。 それと..., スクリプト中に次の1行↓がありますよね。 combobox_cb.prompt = 'フォント2'; この prompt を設定した場合 コンボボックスのアイテム 非選択時 には デフォルトでその prompt である「フォント2」の項目が選択されているということになるんです。 selectedIndex で言うところの -1 が選択状態になるということです。 この prompt には label というものがそもそもありません。 label などないのでそれを変えようとしても > TypeError: Error #1009: null のオブジェクト参照… となるのです。 あくまでも私の推測ですが ですから二重に誤解されているような気がします。 というわけで 私の推測を含む↓修正例(★の部分)です。 //--------------------------------------- package { import flash.display.*; import flash.events.*; import flash.text.*; import fl.events.*; import fl.controls.*; import fl.data.DataProvider; public class test extends MovieClip { var comboData:Array = new Array( {label:"フォント1"}, {label:"MS ゴシック"}, {label:"フォント3"} ); var combobox_cb:ComboBox; //★↓重複しているので削除↓★ //var combobox_cb:ComboBox; var format:TextFormat; var text:TextField; public function test () { init (); } private function init ():void { combobox_cb = new ComboBox(); combobox_cb.dropdownWidth = 200; combobox_cb.width = 200; combobox_cb.move (150, 50); combobox_cb.dataProvider = new DataProvider(comboData); combobox_cb.prompt = 'フォント2'; format = new TextFormat(); format.font = "MS ゴシック"; text = new TextField(); text.defaultTextFormat = format; text.text = 'テキスト'; addChild (combobox_cb); addChild (text); text.addEventListener (MouseEvent.CLICK, changeHandler); } private function changeHandler (e:Event):void { trace (e.currentTarget.getTextFormat().font); //★---↓以下変更↓---★ //コンボボックスの各アイテムをループ for (var i:int = 0; i <= combobox_cb.length-1; i++) { //もしラベルとフォント名が同じであれば if (combobox_cb.getItemAt(i).label == e.currentTarget.getTextFormat().font) { //そのアイテムを選択 combobox_cb.selectedIndex = i; //この forループ を抜ける break; } } } } } //---------------------------------------