![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
コンポーネントのコンボボックスでこのように書きました。
コンボボックスの選択肢とは別にテキストをクリックするとフォント名を取得します。
クリックしたテキストに設定されているフォント名を、コンボボックスのセレクト値に
したいのですが、どうすればいいでしょうか?
■エラー内容
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at test/changeHandler()
■AS3
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);
combobox_cb.selectedItem.label = e.currentTarget.getTextFormat().font;//ここでエラー
}
}
}
No.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;
}
}
}
}
}
//---------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) 複数条件のオートフィルタ(VBA) 2 2022/12/09 15:40
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数式中の文字をCambria Math以...
-
DOSテキスト形式とは?
-
DataGridViewでセル内の特定の...
-
VBA超初心者です。
-
word
-
illustratorとExcelは連携出来...
-
名古屋の栄と錦は治安悪い?
-
バイナリファイルの編集
-
googleサーチコンソールでの重...
-
PDF→CSVへ変換
-
イラレでダブルクリックで文字...
-
PowerPoint SmartArtの箇条書...
-
Illustratorテキストエリアへ塗...
-
VB.NET でのLaod/unLoad につ...
-
LINEのステメやプロ画は変える...
-
exe bat
-
Illustratorのテキストの更新に...
-
NumericUpDownの数値を選択済み...
-
Adobe Acrobatについて
-
サクラエディタで二つのテキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数式中の文字をCambria Math以...
-
DataGridViewでセル内の特定の...
-
VB2008 LabelやButtonのTextを...
-
VBA超初心者です。
-
DOSテキスト形式とは?
-
VBAでpng画像に文字列を描画す...
-
LibreOfficeのフォントワークの...
-
Flash MX 2004とFlash MX
-
外部HTMLテキストが埋め込みフ...
-
歪んだ感じの文字の書き方は?
-
エクリプス(&TOMCAT)...
-
オススメのビットマップフォント
-
パブリッシュしたら思い通りに...
-
ファイル容量を軽くする方法。
-
リッチエディットの独自描画で...
-
パワポにて、フォントのデフォ...
-
Mac OS X テキストエディットに...
-
Flashでテキストアウトライン化...
-
MAC用の書き込める履歴書テンプ...
-
AS3の拡大と縮小について
おすすめ情報