ボタンの有効と無効

このQ&Aのポイント
  • ボタンの有効と無効について初心者向けに解説します。ボタンの使い方や制御方法について詳しく説明します。
  • ボタンの有効と無効を制御する方法をご教授します。初心者でも簡単に実装できるので安心です。
  • ボタンの使い方や有効無効の制御方法について解説します。初心者にもわかりやすく説明します。
回答を見る
  • ベストアンサー

ボタンの有効と無効

アクションスクリプトの初心者です。 いつも、お世話になっております。 ページtopにA,B,C,D四つのボタンがあります。 各ボタンを押すと、ページA、ページB、ページC、ページDへジャンプします。 ボタンAとB両方を押す前には、ボタンCとDは無効です。 AS2.0です。 流れはこうです。 最初Topページは、A,Bボタンは有効、C,Dボタンは無効の状態。 A(B)ボタンを押下→ページA(B)へジャンプ→戻るボタンを押下→Topページへ戻る。→B(A)ボタンを押下→ページB(A)へジャンプ→戻るボタンを押下→Topページへ戻る。→C,Dボタンが有効になり、押下すると各ページへジャンプする。 大元に以下のように書きましたが、なぜかうまくいきません。 どうぞご教授のほどよろしくお願いします。 btnA.onRelease=function(){ gotoAndStop(pageA);//ページAへジャンプ a = 1; } btnB.onRelease=function(){      gotoAndStop(pageB);//ページBへジャンプ b = 1; } if(0==a+b){ btnC.enabled = false; btnD.enabled = false; }else if(2==a+b){ btnC.enabled = true; btnD.enabled = true; }

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

AS2.0 からだけでは判断しかねますが, おそらく Flash Player 7 以降用の SWF をパブリッシュしようとされているのではないかと思います。 その場合,書かれていらっしゃる if文 の後にでも trace(a+b); を付け加えて,「制御」→「ムービープレビュー」してみると原因が見えると思うのですが。 Flash Player 7 以降用の SWF をパブリッシュする場合, 初期値を設定していない変数の値は undefined なんです。 0 ではなく undefined です。 あえて無理矢理,数値的な計算しようとすると NaN(非数!) となります。 次のようにして変数 a と b の初期化をすべきでしょう。 -------------------- //↓要/不要 は場合による stop(); //もし変数 a が未定義であれば if (a == undefined) { // 変数 a に 0 を代入 a = 0; } //もし変数 b が未定義であれば if (b == undefined) { //変数 b に 0 を代入 b = 0; } btnA.onRelease = function() { gotoAndStop("pageA");//ページAへジャンプ a = 1; }; btnB.onRelease = function() { gotoAndStop("pageB");//ページBへジャンプ b = 1; }; btnC.onRelease = function() { gotoAndStop("pageC");//ページCへジャンプ }; btnD.onRelease = function() { gotoAndStop("pageD");//ページDへジャンプ }; //もし a+bが0 または a+bが1 であれば if (0 == a+b || 1 == a+b ) { btnC.enabled = false; btnD.enabled = false; } else if (2 == a+b) { btnC.enabled = true; btnD.enabled = true; } //(↓ムービープレビュー時の検証用) trace(a+b); -------------------- ※ActionScript 1.0 (パブリッシュ設定は 2.0 でも可) ※Flash MX 2004 以上を前提として書きましたが  Flash MX 以上でも使用可 ※Flash Player 7 以上を前提として書きましたが  Flash Player 6 以上でも動作可 もし Topページ が フレーム2 以降でしたら 例えば フレーム1 で  a = 0; などを実行しておけば良いだけで  //もし変数 a が未定義であれば  if (a == undefined) {    //変数 a に 0 を代入    a = 0;  } こんな妙なものは登場させなくて良いのです。 しかし Topページ がもし フレーム1 から始まっていれば,  a = 0; だと Topページ に戻る度に a が 0 に戻ってしまいます。 それで if(a==undefined){… というものを登場させています。 もしくは上記の妙な if文 は消して 最後の if文 を次のように変更するのも1つの方法です。 //もし a+b が 2 でない限り if (2 != a+b) { btnC.enabled = false; btnD.enabled = false; } とにかく trace() でしっかり値を把握してください。  

karisuma79
質問者

お礼

できました! ABE各ページの戻りボタンのアクションスクリプトに var a:String = ""; a = 1; var b:String = ""; b = 1; var e:String = ""; e = 1; を追加して、 大元のアクションアクションスクリプトには、 trace(a + b + e); if(3 > a + b + e){ btnc.enabled = false; btnd.enabled = false; }else if (3 == a + b + e){ btnc.enabled = true; btnd.enabled = true; } に書いたら trace(a + b + e);の出力もちゃんと出力されました。 0 1 2 3 今までできなかった理由としては、ページBとページEの戻るボタンを押すと1が十進数の状態で出力されるべきなのに、二進数の状態で出力されたせいだと私は思います。 なぜ、ページAの戻るボタンを押したらちゃんと1が出力されるのに、ページBとページEの戻りボタンを押すと 10と11が出力されるかはわかりません。まったく同じ(パターン)ようにソースを書きましたが、、 もっと、勉強したいと思います。 BlurFiltan様、参考になるご回答ありがとうございました。 これからもよろしくお願いします。

karisuma79
質問者

補足

BlurFiltan様ご回答ありがとうございます! 回答してくれた通りやりましたら、以下のように出力されました。 0 ← 最初から 1 ← btnAを押下すると 0 ← ページAの戻りボタンでTopページへ戻ると  1 ← btnBを押下すると 0 ← ページBの戻りボタンでTopページへ戻ると  結果的に、思う通りにできませんでした。 そこで、ページAとページBの戻りボタンに各a = 1;とb = 1;を追加したら思うとおりにできました。ムービープレビューの結果も以下のとおりです。 0 ← 最初から 1 ← btnAを押下すると 1 ← ページAの戻りボタンでTopページへ戻ると  1 ← btnBを押下 2 ← ページBの戻りボタンでTopページへ戻る  ご教授頂きたい事。 ボタンAとBを押すときのa = 1;とb = 1;はあんまり意味ないのではと思って、実際a = 1;とb = 1;を削除をして見ましたが、同じく 0 1※ 1 1※ 2 が出力されました。(あれ?) ※a = 1;とb = 1;を削除したので、0,0のはず?なのに、、、 なぜでしょうか? ************************ もう一つご教授頂きたい事があります。 ボタンEとページEをもうひと組を追加したら、なぜか変に出力され、また結果が思う通りにもできません。(不思議です。) 以下ソースを追加、修正しました。 ●追加 //もし変数 E が未定義であれば if (e == undefined) { //変数 e に 0 を代入 e = 0; } ●追加 btnE.onRelease = function() { gotoAndStop("pageE");//ページEへジャンプ e = 1; }; ●修正 //もし a+b+eが0 または a+b+eが2 であれば if (0 == a+b+e || 2 == a+b+e) { btnC.enabled = false; btnD.enabled = false; } else if (3 == a+b+e) { btnC.enabled = true; btnD.enabled = true; } ●修正 //(↓ムービープレビュー時の検証用) trace(a+b+e); ●追加 そして、ページEの戻りボタンに e =1;を追加。 出力は以下の通りです。 00 ←最初から (0のはずでは?)※ 1  ←ボタンAを押下すると 1  ←ページAの戻りボタンでTopページへ戻ると     (この時点で、ボタンCとDがなぜか true になります。)※ 1  ←ボタンBを押下すると 2  ←ページBの戻りボタンでTopページへ戻ると    (この時点で、ボタンCとボタンDは false になります。) 1  ←ボタンEを押下すると 3  ←ページEの戻りボタンでTopページへ戻ると    (この時点で、ボタンCとボタンDは trueになります。) ※<-この記号のところをご教授頂きたいですが、、 なぜ、最初 trace(a+b+e); は00、 なぜ、ページAから戻ったところで、ボタンCとDがfalseはずなのに、trueでしょうか? 初心者の自分にとしては本当に不思議です。 なにぶんにも初心者ですので詳しく教えて頂けると有り難いです。 説明不足で解りにくいと思いますが、宜しくお願い致します。

関連するQ&A

  • actionscript3.0でボタン操作無効化

    flashのHPを作っております。 (mc)ボタンを配置しクリックすると画面の背景が変わる操作をしたいと思っており(top、new、main・・・など) 下記のHPのような http://www.mediacreator.jp/tutorials/show_tutorial.asp?id=69&pn=3 操作ボタンを作っております。 上記HPは2.0で製作されているため、3.0に改変し、 アクションを下のようにしました。 var buttonNames= new Array("button1", "button2", "button3", "button4"); button1.buttonMode = true; button2.buttonMode = true; button3.buttonMode = true; button4.buttonMode = true; button1.addEventListener(MouseEvent.CLICK, button1click); button2.addEventListener(MouseEvent.CLICK, button2click); button3.addEventListener(MouseEvent.CLICK, button3click); button4.addEventListener(MouseEvent.CLICK, button4click); function resetButton(buttonName){ for(var i = 0; i < buttonNames.length; i++){ if(buttonNames[i] != buttonName){ this[buttonNames[i]].gotoAndStop(1); this[buttonNames[i]].enabled = true; } } } function button1click(event:MouseEvent):void { resetButton(button1); this.gotoAndStop(2); this.enabled = false; } function button2click(event:MouseEvent):void { resetButton(button2); this.gotoAndStop(2); this.enabled = false; } function button3click(event:MouseEvent):void { resetButton(button3); this.gotoAndStop(2); this.enabled = false; } function button4click(event:MouseEvent):void { resetButton(button4); this.gotoAndStop(2); this.enabled = false; } コンパイルエラーは無くなったのですが、ボタン自体が動いてくれません。 どこが間違っているか分かる方、お教え下さい!

  • ムービークリップボタンの連動?

    お世話になります。 AS2.0の初心者です。 ページAにムービークリップタイプのボタンbuttonAとbuttonBがあります。そして、ページCがあります。 this.gotoAndStop(1);白 this.gotoAndStop(2);黒 this.gotoAndStop(3);白 仕様としては、 最初ページには、buttonAボタンしかありません。 この状態でEnterキーを押すと、buttonAが反応しページAで結果がでます。そして、buttonAボタンは見えなくなり、buttonBボタンが見えます。 ここで、もう一回Enterキーを押すと今度はbuttonBが反応し、ページCに移動します。 でも、実際は、最初Enrterキーを押すと、buttonAボタンだけではなく、buttonBボタンも一緒に反応しちゃって、一気にページC移動します。こうなると結果を見ることができません。 ここで質問ですが、最初Enterキーを押した場合、buttonAボタンだけ、反応させる方法はありませんか?そして、2度目のEnterキーを押すと今度はbuttonBボタンだけ反応する、、、 以下は、そのソースです。どこが間違っていますか。よろしくお願いします。 ●大元アクションスクリプト buttonA._visible=true; buttonB_visible=false; buttonA.onKeyDown = function() { if (Key.isDown(Key.ENTER)) { //ページAに結果出力 buttonA._visible=false; buttonB_visible=true; } } ●buttonAのアクションスクリプト // 何かキーが押された時 onClipEvent (keyDown) { if (Key.getCode() == 13) { this.gotoAndStop(2); } } // 何かキーが放された時 onClipEvent (keyUp) { if (Key.getCode() == 13) { this.gotoAndStop(1); } } ●buttonBのアクションスクリプト // 何かキーが押された時 onClipEvent (keyDown) { if (Key.getCode() == 13) { this.gotoAndStop(2); } } // 何かキーが放された時 onClipEvent (keyUp) { this.gotoAndStop(1); if (Key.getCode() == 13) { //ページCへ移動 } }

    • ベストアンサー
    • Flash
  • どれか1つでもチェックされていたら無効にする

    VB2010 7 Pro SP1 8つのチェックボックスと4つのラジオボタンがあり、チェックボックスにどれか1つでも チェックが入っていたらラジオボタンを無効にし、チェックが全部外れたら ラジオボタンを有効にしたいです。 下記のようなifで出来るかと思ったのですが、フォーム、ラジオボタン、チェックボックス どれに記述しても動きません。 どこに記述すればいいでしょうか? If CheckBox1.Checked Or CheckBox2.Checked Or CheckBox3.Checked Or CheckBox4.Checked Or CheckBox5.Checked Or CheckBox6.Checked Or CheckBox7.Checked Or CheckBox8.Checked Then RadioButton4.Enabled = False RadioButton6.Enabled = False RadioButton7.Enabled = False RadioButton8.Enabled = False Else RadioButton4.Enabled = True RadioButton6.Enabled = True RadioButton7.Enabled = True RadioButton8.Enabled = True End If

  • loadMovieしたムービークリップのボタン化

    ムービークリップにloadMovieで1.jpgをロードし、それをボタンにしたいのですが、下のスクリプトではうまく動作しません。 menu01_mc.loadMovie("1.jpg"); menu01_mc._xscale=10; menu01_mc._yscale=10; menu01_mc.onRelease = function(){ gotoAndStop(5); } 最初のloadMovieの部分をなくし、 menu01_mc.onRelease = function(){ gotoAndStop(5); } とするとちゃんと動作します。 loadMovieしたムービークリップはボタンにできないのでしょうか? FlashCS3、actionscript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ボタンのリンク先が毎回定まりません^^;

    ボタンを使ってフレームラベルにリンクを作成しているのですが、どのボタンも押すとリンク先が一つづつ隣のラベルにズレてきてしまいます。こんな感じスクリプト書いてみたんですが…。 menu1_btn.onRelease = function() { gotoAndStop(label_top); }; ボタンとスクリプトを配置しているのはAムービークリップ内で、リンク先のフレームラベルはメインのライムラインになります。 使っているソフトはFlash MX 2004 Plofessonalです。 基本的なことで申し訳ないのですが、どなたか原因と対処方法を教えてください。

  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

    • ベストアンサー
    • Flash
  • 変更イベント

    テキストフィールドAとBがあり、どちらか一方でもテキストを変更されると ボタンCのEnabled属性がtrue(デフォルトでfalseに設定している)ようにしたいと考えています。 通常ならば、テキストフィールドAとBのTextChangedイベントに ボタンCのEnabled属性をtrueとするように記述すれば良いだけなのですが 今回、テキストフィールドAとBは汎用的なユーザーコントロールD内に存在しており ボタンCはそのユーザコントロールDを含むフォーム上に存在しています。 つまり、ユーザコントロール上に存在するテキストフィールドが変更された時に フォーム上のボタンのEnabled属性をtrueとしたいのですが テキストフィールドのTextChangedイベントの処理内容にフォームに対する処理を記述すると フォームとユーザコントロールの依存度が高くなるのでそれを避けたいのです。 できればユーザコントロールの内容が変更されたときのイベントを フォーム側で拾えると一番いいかと思うのですが そのようなことは可能でしょうか? あるいは何かいい方法はございますでしょうか?

  • Accessにて、コントロールの編集可能、使用可能の設定

    Access2002を使用しています。 表形式で作成したフォームで、 Aというチェックボックスに、チェックが入っている場合  Bのコントロールは入力可能、  Cのコントロールは入力不可 チェックが入っていない場合、  Bのコントロールは入力不可、  Cのコントロールは入力可能 というふうにしたいのですが、 Private Sub A_AfterUpdate()   If A = -1 Then     B.Locked = False     B.Enabled = True     C.Locked = False     C.Enabled = False   Else     B.Locked = False     B.Enabled = False     C.Locked = False     C.Enabled = True   End If End Sub 上記のように設定すると、すべてのレコードに対しての設定になってしまいます。 1件ずつのレコードに対して、条件を設定するにはどのようにすればよいでしょうか? よろしくお願いいたします。

  • 選択肢によってラジオボタンを押せなくする(無効にする)

    2.7.2.の質問があって、ラジオボタンの選択肢(1~5まで)によって、 1を選択したら、2.7.2.1のみ選択、その他はラジオボタン押せなくする 、2を選択すると、2.7.2.2のみ選択、その他はラジオボタン押せなくする 、3を選択すると、2.7.2.3のみ選択、その他はラジオボタン押せなくする 4、5を選択すると、2.7.2.1、2.7.2.2、2.7.2.3、すべてを押せなくして、submitボタンを押して次へという処理をしたいのですが、下記のプログラムではまったく動作しません。 どこが悪いのでしょうか?お分かりの方教えていただけませんか? <script language="javascript"> <!-- function check(){ if(document.form1.BQ20[0].checked == true) { document.form1.BQ201.disabled = false; document.form1.BQ201.bgColor='#FFFFFF'; }else if(document.form1.BQ20[1].checked == true) { document.form1.BQ202.disabled = false; document.form1.BQ202.bgColor='#D4D0C8'; }else if(document.form1.BQ20[2].checked == true) { document.form1.BQ203.disabled = false; document.form1.BQ203.bgColor='#D4D0C8'; }else{ document.form1.BQ201.disabled = true; document.form1.BQ201.bgColor='#FFFFFF'; document.form1.BQ202.disabled = true; document.form1.BQ202.bgColor='#FFFFFF'; document.form1.BQ203.disabled = true; document.form1.BQ203.bgColor='#FFFFFF'; } } // --> </script> 以下省略

  • ラジオボタンの作り方

    Flash8とwinXPを利用しています。 ラジオボタンについて教えてください。 《A》《B》《C》3つのムービークリップを作りました。 ラジオボタン(1)ALL (2)A (3)B (4)C の4つを作り、false・trueを使用して  (1)をクリックすると A・B・C 全部が表示  (2)をクリックすると A のみ表示  (3)をクリックすると B のみ表示  (4)をクリックすると C のみ表示 という画面を作りたいと思っています。 【チェックボタン】では作成できたのですが、【ラジオボタン】の "Group"? がよく分からなくてうまくゆきません。 初歩的なことだと思うのですが注意点等を含めて、教えてください。

    • ベストアンサー
    • Flash

専門家に質問してみよう