• ベストアンサー

ComboBoxについて

ComboBoxのセレクトした部分を変える方法はないでしょうか? dataに[0,1,2,3,4]、labelsに[1,2,3,4,5]としたComboBoxを用意し、それを選択するとdataを変数に記憶させておき、別ボタンで隣のフレームに移動させます。 再度このComboBoxのあるフレームに移動した場合、読込時に先ほど選択した位置に変える方法が見つからず困っています。 this.selected = dataの入った変数 などいろいろ試してみましたが無理でした。 FlashMX Professional2004 7.0.1 を使用しています。

  • Flash
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

#1です。 ラジオボタンでも、最後に押されたボタンを記憶して、ラジオボタンがステージに登場した時にそのボタンを選択済みにする、という発想は同じです。 ComboBox でいうところの selectedIndex にあたるものとして、selection というプロパティがあります。主にグループ内で選択されているラジオボタンへの参照を管理するプロパティで、どのボタンが選択されているかを知ることも、書き換えて指定のボタンを選択済みにすることもできます。 RadioButton コンポーネントには、違ったボタンが選択された時に発生するイベントはありません。その代わり、ボタンがクリックされた時に発生する click というイベントがあります。今回はこれを利用します。 click イベントを処理するには、普通のボタン等と同様に on を使う方法と、リスナーオブジェクトというオブジェクトを生成・登録し、イベントが発生した時に定義済みの関数を呼び出して処理させる方法があります。 on を使った方法は全てのボタンに設定しなければならず、ボタンが2つくらいならまだしも、3つも4つもある場合はメンテナンス上も非効率的です。少々難しいですが、ここでは、後者のリスナーオブジェクトを利用する方法をご紹介します。 ComboBox のリストや項目は、ComboBox のインスタンスが自分の中の項目などを管理していました。 ComboBox のインスタンスはステージ上に存在していて、目に見える実体のあるオブジェクトです。インスタンスにオブジェクトアクションを設定し、イベントを処理することが可能でした。 ラジオボタンは同じグループ名を持つ複数のボタンを1つのセットとし、セット内でただ1つのボタンだけを選択できる仕組みになっています。 複数のボタンを持つという点では ComboBox と似ています。しかし、RadioButton インスタンスは1つ1つが独立したオブジェクトです。グループ名とは各ボタンを管理する上で付けられた識別用の名前にすぎず、グループ名を持つ1つのインスタンスがステージに実在するわけではありません。 ステージに実体がないのではオブジェクトアクションが書けないため、ラジオボタングループに対し on でイベントを処理することができません。 ステージに実体を持たないインスタンスでイベントを処理する、つまり、on に代わるものとして用意されているのが、リスナーオブジェクトと呼ばれるものです。 汎用型である Object 型の変数を1つ作り、これを、イベントを処理したいインスタンスにリスナーオブジェクトとして登録します。リスナーオブジェクトには、イベントが起きた時に実行する関数を定義しておきます。 インスタンスでイベントが発生すると、登録されているリスナーオブジェクトに通知されます。リスナーオブジェクト側は通知を受け取ると、そのイベントに対応する関数を呼び出します。 同じくリスナーオブジェクトで処理できるインスタンスは他にもいろいろありますが、その中でもラジオボタングループでのイベント処理の原理は少々複雑で、ここでは説明し切れませんので、とりあえずスクリプトだけご紹介します。 詳しい原理はヘルプに書かれています。興味がおありでしたら調べてみてください。 次のようなスクリプトを、フレームに設定します。  //イベントを処理するオブジェクトの生成  radio_obj = new Object();  //ラジオボタングループの設定  //選択されたボタンへの参照を記録する  radio_obj.click = function ( event_obj )  {   _root.pressed_btn = event_obj.target.selection;  };  //イベントを処理するオブジェクトを登録  seibetu1.addEventListener( "click" , radio_obj ); radio_obj というオブジェクトが、ラジオボタングループ seibetu1 のリスナーオブジェクトになります。グループ内で click イベントが発生すると、radio_obj に通知され、対応する関数が呼び出されます。 関数の中では、イベントの起きたインスタンス(今回の場合は seibetu1 ラジオボタングループ)の selection プロパティを見て、グループ内で選択されたボタンへの参照を取得し、_root 階層の pressed_btn という変数に記録しています。 先述の通り、ラジオボタングループはステージに実体がありませんから、seibetu1 というラジオボタングループとしては load イベントは発生しません。 ですが、グループに含まれているボタン1つ1つはステージに実体を持つインスタンスですので、それぞれで load イベントが発生します。 選択済みボタンを設定するには、グループ内のいずれかのラジオボタンの load イベントを借りる方法が、一番簡単です。 次のようなスクリプトを、グループ内のラジオボタンのどれか1つに設定します。  //前回選択されたボタンを選択済みにする  onClipEvent(load)  {   //選択済みボタンを保持する変数がない場合:新規に作成   //初期値はデフォルトで選択されているボタン   if( _root.pressed_btn == undefined )   {    _root.pressed_btn = _root.seibetu1.selection;   }   //前回押されたボタンを選択済みにする    _root.seibetu1.selection = _root.pressed_btn;  } ラジオボタンは、いずれかのボタンがデフォルトで選択済みになっている場合も多いと思います。RadioButton インスタンスの selected というパラメータを true にすると、そのボタンがデフォルトで選択済みになります。上記のスクリプトでは、selected が true になっているボタンへの参照が pressed_btn 変数の初期値になります。 デフォルトでどのボタンも選択されていない状態にすると、変数の初期値も undefined になり、何も選択されていない状態でスタートします。 他にも方法はあるかと思いますが、こんなところでいかがでしょうか。

vjedogonia00
質問者

お礼

再度、解りやすいご説明有難う御座います。 おかげさまでうまくいく事が出来ました。

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

ComboBox で利用できる要素には、リストに表示される項目名(ラベル)・各項目に設定されている情報(データ)・何番目の項目であるかの情報(インデックス)の3つがあります。 このうちのインデックスを使ってみてはいかがでしょう。 何番目の項目が選択されているかは、ComboBox クラスが持っている selectedIndex プロパティに保存されています。また、このプロパティを書き換えると、指定の項目を選択済みとして設定することができます。 前回、何番目の項目が選択されていたのかを保持する変数を、1つ用意します。この変数を ComboBox のインスタンスに設定するといろいろと面倒ですので、_root 階層に用意します。 ComboBox には、今選択されているものと違う項目が選択された時に発生する change というイベントがあります。change イベントが発生するたびに selectedIndex プロパティを参照し、何番目の項目が選択されたかの情報を変数に記録します。 この変数の中身を selectedIndex に代入すると、最終的に選択された項目をデフォルトの選択済み項目に指定できます。 この処理は、ComboBox がステージに登場した、その時1回実行すれば充分です。 ComboBox はコンポーネントですが、コンポーネントとはパラメータを持つ”ムービークリップ”です。ムービークリップでもある以上、ムービークリップで利用できるイベント等は全て利用可能です。 ムービークリップには、インスタンスがステージに登場した時1度だけ発生する load イベントがあります。選択済み項目を設定する処理には、このイベントを利用します。 スクリプトにしますと、大体、次のようになります。このスクリプトは ComboBox のインスタンスに設定します。 (↓このスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  //選択済みにする項目の設定  onClipEvent(load)  {   //最初の1回:選択済み項目を保持する変数が存在しない場合   if( _root.sel_index == undefined )   {    //変数を作成     _root.sel_index = 0;   }   //選択済み項目を設定   this.selectedIndex = _root.sel_index;  }  //変更された場合、選択済みにする項目を更新する  on(change)  {    _root.sel_index = this.selectedIndex;  } 存在しない変数を参照・評価しようとすると、undefined という値が返されます。 何番目の項目が選択されたかを保持する変数(上記のスクリプトでは sel_index )は、ムービーが再生された最初の1回目の時点では、まだ存在していません。 そこで、undefined を利用して、ムービーの再生中、本当に最初の1度だけ、0に初期化する処理を入れます。undefined のまま進んでも、最初は初期配置である0番目の項目(最初の項目)が自動的に表示されますが、ここでは明示的に最初の項目を表示するようにしています。デフォルトで表示したい項目が0番目ではない場合、この初期化は特に大切です。 load イベントは、他のフレームに行ってインスタンスがステージから消え、また元のフレームに戻って再登場した場合は、この時にもう1度発生します。 従って、load イベントが発生するたびに selectedIndex プロパティを書き換えるようにすると、何度フレーム間を往復しても、必ず前回選択された項目を選択済みに設定できるという仕組みが出来上がります。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

vjedogonia00
質問者

補足

DPE様、大変わかりやすい説明でうまくやることが出来ました。ありがとうございます。 ComboBox の件はうまくいったのですが、便乗で RadioButton についてお聞きしたいことがあります。 現在、label に「男」と「女」を書いた2つの RadioButton があり、両方の groupName を seibetu1 としています。 ComboBox と同様にどちらか選択した後にその選択場所を記憶させて、読込時に・印を付ける方法がわかりません。

関連するQ&A

  • Combobox(コンボボックス)でデータを送るには?

    よろしくお願い致します。 Flash CS4を使用しています。 Comboboxで個数を選択して、「送信」というボタンをクリックしたときに選択した個数のデータをCGIに送りたいと思っています。 Comboboxのコンポーネントインスペクタのdata・labelsは、ともに1、2、3という数字を設定しています。 例えばhtmlでプルダウンを作成するときは以下のように作成するかと思いますが、FlashのComboboxの場合はnameの値(数量)はどこで設定するのでしょうか? --- htmlでプルダウン作成する場合 <select name="数量" /> <option value="1">1</option> </select> --- また、選択された値を変数にして「送信」ボタンをクリックしたときに送るのだと思うのですが、その場合のスクリプトはどのように書けばよいのでしょうか? 「送信」ボタンは以下のスクリプトを書いています。 on(release) { getURL("●●.cgi?mode=regist&name=●●", "_self"); } 分かりづらい説明で申し訳ありません。 補足説明致しますので、どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • ComboBoxの設定方法

     フラッシュ初級者です。よろしくお願いします。 使っているフラッシュはMX2004です。 comboboxでシーンやラベルに飛べるようにしたいのですが、中々うまくいきません。 というかまったくわかりません…。 例えば「序盤」,「中盤」,「終盤」といシーン、 合計3つのシーンがあったとして、コンボボックスを開くと、この「序盤」,「中盤」,「終盤」が選択できて、選択するとそのシーンに飛ぶにはどのようなスクリプトをコンボボックスに入れておけばいいのでしょうか?(終盤を選択したときは「終盤」シーンの中のフレームラベル「hogehoge」に飛べるようにしたいです。) また、その際のコンボボックスのプロパティインスペクタの中のパラメーターの設定(data,editable,labels,rowcount)はどう設定すればいいのでしょうか? コンボボックスはシーン「終盤」に置くという設定です。 色々googleでもcomboboxについて検索してみたのですが、comboboxについて初級者用に解説しているページがみつからなかったので。 やさしく解説しているサイト等もしっていましたらご教授くださると大変うれしいです。

  • ComboBoxでmcを移動させるには

    お世話になります。 コンポーネントのComboBoxでリストから項目を選択して、一つのムービークリップを等間隔で移動させたいと思っています。 例えば、 +10.0を選択するとmcが右に1300px移動 +3.0を選択するとmcが右に390px移動 +1.0を選択するとmcが右に130px移動 0はデフォルト -1.0を選択するとmcが左に130px移動 -3.0を選択するとmcが左に390px移動 -10.0を選択するとmcが左に1300px移動 というような感じに作るにはどうしたら良いでしょうか? なるべく簡単な方法でできるとありがたいです。 どうぞ宜しくお願いいたします。 環境:Windows XP、Flash Professional 8

  • Comboboxのデータを入れ替えたいが一部残ってしまう

    OS:WinXP-Home Office:Excel2000 を使用して、VBAの入力フォームを作成しています 3つのCombobox(オブジェクト名を「Data○」と命名:○には数字が入ります)を使い 1つ目のComboboxが選択されると 2・3個目のComboboxにデータが入るようにしたいのですが 以下のソースで不具合が出ましたのでお知恵を貸してください Private Sub UserForm_Initialize() Data1.AddItem "A" Data1.AddItem "あ" End Sub Private Sub Data1_Change() Dim i As Integer Dim j As Integer For j = 2 To 3 For i = 1 To Controls("Data" & j).ListCount Controls("Data" & j).RemoveItem 0 Next i Next j Select Case Data1.ListIndex Case 0 For j = 2 To 3 Controls("Data" & j).AddItem "A" Controls("Data" & j).AddItem "B" Controls("Data" & j).AddItem "C" Next j Case 1 For j = 2 To 3 Controls("Data" & j).AddItem "あ" Controls("Data" & j).AddItem "い" Controls("Data" & j).AddItem "う" Controls("Data" & j).AddItem "え" Controls("Data" & j).AddItem "お" Next j End Select End Sub これを実行した時に、 例えば2・3個目のComboboxを何も選択していない状態で 1つ目のComboboxを操作すると問題なくデータが開放されて 新たに入ります ですが、例えば 1個目:"あ" 2個目:"え" などの選択された状態で1個目を"A"に変えると 2個目のリストには "お" "A" "B" "C" となるケースがあります(毎回ではありません) Removeitemをする部分で調べてみたところ、うまくいかない時は 内側のiのループで Controls("Data" & j).ListCountの値は正常なのに 実際のループでは選択しているListindexで ループから抜けてしまっていました ソース上では問題ないので、どこを修正したらよいか分かりません よろしくお願いします

  • エクセル 複数のComboBoxの連携

    エクセルでフォームを使い、社内各部署での案件の一覧の検索データベースを作成中です。 その際、ComboBoxを3つ使い、1「支店名」2「課名」3「チーム名」を選択するようにしたいのですが、支店により課名やチーム名が異なるため、1で選択した支店名と合致する課やチーム名が選べるようにしたく、以下のようなマクロを組みました。が、実行すると、支店名は表示されるものの、何故か選択できません。また、2つ目(課)の結果から3つ目(チーム名)も得る方法もいまいちよくわかりません。ご教示お願いいたします。 Option Explicit Private Sub ComboBox5_Change() Dim si As Integer With UserForm1 .ComboBox5.Text = "" si = .ComboBox5.ListIndex Select Case si Case 0 .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" 以下必要分続く ’ComboBox6の結果から7を得るには? End Select End With End Sub Private Sub UserForm_Initialize() ' ComboBox がアクティブの時の処理 With UserForm1 .ComboBox5.AddItem "A支店" .ComboBox5.AddItem "B支店" .ComboBox5.AddItem "C支店" .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" .ComboBox7.AddItem "Aチーム" .ComboBox7.AddItem "Bチーム" .ComboBox7.AddItem "Cチーム" End With End Sub

  • Comboboxの選択値をパラメータにしたい

    VS2010でComboboxを作成し、 選択されたパラメータを別のファンクションで利用したい。 プログラムの内容はPC上で認識されているCOMポートを Comboboxにリストアップ、 ユーザが選択したCOMポートを利用するような流れです。 現状: Private Sub GetSerialPortNames() With SP_Select .Text = "None" .Items.Clear() For Each sp As String In My.Computer.Ports.SerialPortNames .Items.Add(sp) Next .EndUpdate() .SelectedIndex = 0 End With End Sub 上記コードでデフォルトはNoneと表示され、 COMポートデバイスが接続された際に、 自動的にComboboxにポートの名前が表示されます。 さらに選択したCOMポートを変数に代入して使うには、 どうしたらいいでしょうか。(どう書いたらいいでしょうか) 初歩的な質問ですが、どなたが教えて下さい。

  • ComboBoxでの一文字検索が上手くいきません

    ソフトはEXCEL2003です。 質問内容: ユーザーフォーム習い始めたところで、つまずいています。 やりたいことは、フォーム上に配置したComboBoxに別シート(選択一覧)で作成した「カタカナ1文字、会社名、会社コード」の3項目を表示可能にしておく。 ComboBoxへのカタカナ1文字入力により、該当する会社の上記3項目を表示し、会社選択後ComboBoxには会社名を表示、リストボックスには選択した会社コードを表示し、登録リストに会社名と会社コードを登録する。 フォームを作成してテストしましたが、一部のカタカナ(ヒなど)で該当する会社が選択されません。 何が問題なのか知識が足りませんので、困っています。 お分かりになる方に教えて頂きたくお願いします。 なお今回会社名をカタカナ1文字検索にしたのは、例えば社名の前に(株)等が付くものや、同じ漢字でも日本(ニホン)、日陰(ヒカゲ)等呼び名が異なるものがあるためです。 また、ComboBoxのプロパティは「MatchEntry」を「0-fmMatchEntryFirstLetter」としてあります。 ところで作成した命令は次の通りです。 Private Sub UserForm_Initialize() Dim MyVar1 As Variant Dim Ws1, Ws2 As Worksheet Dim LastRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") Ws2.Select MyVar1 = Range("A3:C490") With ComboBox1   .ColumnCount = 3  ’カタカナ1文字、会社名、会社コード   .ColumnWidths = "20;230;10"   .List = MyVar1 End With ComboBox1.TextColumn = 2   Ws1.Select   ComboBox1.MatchEntry = fmMatchEntryFirstLetter End Sub Private Sub ComboBox1_Change() '会社名処理 Dim Ws1, Ws2 As Worksheet Dim NawRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") ComboBox1.MatchEntry = fmMatchEntryFirstLetter    '表示行数を確認 一番上が「0」なので+1   NawRow = Me.ComboBox1.ListIndex + 1   TextBox4.Text = Ws2.Cells(NawRow + 2, 3) '会社コード表示;選択一覧は3列3行目から開始 Ws2.Cells(1, 1) = NawRow + 3       '選択一覧1行目に選択行表示 デバック用 End Sub  ※登録リストへの会社名と会社コードを登録する部分は省略しました。  以上よろしくお願いします。 その他、このような多くの会社名選択で、よい方法があれば教えてください。

  • VBAでJavaScriptを動かす方法

    <SELECT name="Mgr" onchange="Chg(this,1)"> <OPTION selected value="9999999">==選択==</OPTION> <OPTION value="1">a</OPTION> <OPTION value="2">b</OPTION> <OPTION value="3">c</OPTION> </SELECT> 上記のタグで VBAから objIE.Document.forms(0).Mgr.Item(2).Selected = True とSelectタグを選択したときにChg(this,1)を動かす方法を教えてください。 objIE.Navigate "JavaScript:Chg(this,1)"とやっても動きませんでした。

  • ドロップダウンからアンカー先へジャンプ

    いろいろ調べたのですが上記方法がわかりません。 現在のところこんな感じやっています。 <form onChange="parent.main.location.href = this.options[this.selectedIndex].value"> <p><select size="1" name="D1"> <option selected>現在高校生</option> <option VALUE="#chugak">現在中学生</option> <option VALUE="#chujuk">現在中学受験志望</option> <option VALUE="#shogak">現在小学生</option> </select>まずこちらより該当学年をお選びください</p> </form> ・ ・ <a name="chugak">現在中学生</a> フレームがありましてフレームのmainページ内の移動を目指しています。上記方法ではなにもおこりません。アンカー(ブックマーク)に移動させるにはどうしたらよいのでしょうか? どこがおかしいのかご教授ください。よろしくお願いします。

  • SELECTでOPTION多数の場合のselectedされたOPTION項目表示

    あるフォームのなかでselectで選択し、submitしたデータを再度同一フォームで編集できるような画面を作っています。 selectのOPTIONの数が100ほどあり、selectの表示サイズをレイアウト上10に設定しています。 選択されたデータをDBから読み、そのOPTIONをselectedとしているのですが、 そのOPTIONが例えば上から80番目などにあると、 すでに何か選択されているのか、あるいは何も選択されていなかったのか、いちいちスクロールして確かめないとわかりません。 このような場合に、選択されている項目のOPTION selectedがselectの表示エリアの中にあらかじめ表示されるようにするにはどのようにしたら良いのでしょうか? よろしくお願いします。

専門家に質問してみよう