キーボード操作でボタンのフォーカスを移動させる方法【初心者向け】

このQ&Aのポイント
  • 超初心者の方に向けて、ムービークリップタイプのボタンでのキーボード操作について解説します。
  • TABキーと連動させることで、ボタンのフォーカスを移動させ、Enterキーでイベントを発生させることが可能です。
  • アクションスクリプトのバージョンは2.0を使用します。ご興味のある方は、ぜひお試しください!
回答を見る
  • ベストアンサー

キーを離した際、、、

超初心者です。 ムービークリップタイプのA、B、C、D、4つのボタンを作成しました。 マウスを各ボタン上に乗せると、色が変わります。 選ばれたボタンを、クリックすると、イベントが発生します。 これをTABキーと連動したいです。 TABキーが離された瞬間、次のボタンへフォーカスが移動する形で、ボタンを選び、そして、決めたボタン上でEnterキーを押したら、イベントを発生させたいです。 例として、最初TABキーを押したら、フォーカスがAボタンへ行きます。 次に、TABキーを離したら、AからBボタンへ行きます。 また、TABキーを離したら、今度は、BボタンからCボタンへ行きます。 この過程中、TABキーをずっと押したまま離さないと、フォーカスが移動しません。 アクションスクリプトのバージョンは2.0です。 こういうのって可能ですか? 可能ならば、ぜひよろしくお願いいたします。

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

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

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

以下 #2 の方と内容が重複するかもしれませんが一応。 > 例として、最初TABキー これ以降の「例」の説明がよくわかりませんが, その「例」より上のご質問内容を見て, 一応 "形だけ" そのようなものは考えて作ってみました。 ムービークリップ(MC)製の A・B・C・D 4つのボタンにはそれぞれ 「A_mc」「B_mc」「C_mc」「D_mc」というインスタンス名を付けるとします。 それら 4つの MC が配置してあるタイムラインのフレームに書くスクリプト例です。 ---------------------------------- // 配列mcArr にボタンMC名を登録しておく var mcArr:Array = new Array("A_mc", "B_mc", "C_mc", "D_mc"); for (var i:Number = 0; i<mcArr.length; i++) { // 各ボタンMCの自動Tab選択を無効にする this[mcArr[i]].tabEnabled = false; // 各ボタンMCに何某かのアクションを設定(仮) this[mcArr[i]].onRelease = function():Void { trace(this._name); }; } // カウント用変数 cnt に初期値を設定 var cnt:Number = 0; // キー監視用オブジェクト keyObj を作成 var keyObj:Object = new Object(); // キーアップ時の動作を定義 keyObj.onKeyUp = function():Void { // アップしたキーが Tab であれば if (Key.getCode() == 9) { // mcArr の cnt 要素のボタンにフォーカスを当てる Selection.setFocus(mcArr[cnt]); // cntが配列要素数-1未満だと cntに1を加算しそれ以外は0に戻す cnt = (cnt<mcArr.length-1) ? cnt+1 : 0; } }; // keyObj を Keyクラスのリスナーに登録 Key.addListener(keyObj); ---------------------------------- ※ Flash MX 2004 以上 ActionScript 2.0 これですが..., 「制御」→「ムービープレビュー」で出てくるプレビューパネルで, 「制御」→「キーボードショートカットを無効」にして動作確認するか, もしくは, パブリッシュしたSWFをダブルクリックして スタンドアローンの Flash Player で見たときは 思惑通りに動くんです。 しかし! SWFをHTMLに貼り付けてブラウザで見ると HTML やブラウザなどにフォーカスが移り回るんです。 「Tab」キーには意味(既存割り当ての動作)があるので Flash だけの問題で済まなくなると思います。 上に書いた「一応 "形だけ" そのようなものは考えて作ってみた。」という意味はそういうことです。 ブラウザなどに表示させる場合は「Tab」キーでない別のキーでフォーカス移動させる方が良いと思います。

totorojp
質問者

お礼

BlurFiltan様、 ご丁寧に書いていただいてありがとうございます。 ブラウザから見ると確かに、HTML やブラウザなどにフォーカスが移り回るますね、、他のキーでやるしかないですね、、

その他の回答 (2)

noname#108428
noname#108428
回答No.2

連投になりますが、多くのWebブラウザが、 tabキーでフォーム部品等をフォーカスし、 enterキーでクリックと同様の効果 を実装しています。 貴殿の書いた仕様ですと、 押す=Aをフォーカス(Webブラウザの機能) 離す=Bをフォーカス(このボタンの機能) 押す=Cをフォーカス(Webブラウザの機能) 離す=フォーカスを一度Bに戻してからCへ移動(このボタンの機能) という奇怪な挙動となります。 基本設計を見直された方が良いでしょう。 また、一部のWebブラウザは、この挙動をカスタマイズ可能です。 これとの競合は、念頭に置かれてますか?

totorojp
質問者

補足

U-ta_m様 なるほど、これらは、まったく知りませんでした。 勉強になりました。 TABキーが離された瞬間ではなく、押された瞬間に、次にボタンへフォーカスが移動する仕様に変更します。 よろしくお願いします。

noname#108428
noname#108428
回答No.1

tabキーを押すとAがフォーカスされ、それを離すとBにフォーカスが 移る仕様だと、Aを選択する為にはDまでいって一回りする必要が生じますね。 そんな不便な仕様で本当に良いのですか?

関連するQ&A

  • tabキーによるフォーカスをさせないようにするには?

    tabキーでフォーカスを移動すると、ボタンの役割を持っているムービークリップは黄色でマークされますが、これをさせないためにはどのようなスクリプトを用意しておけばいいのでしょうか? ただ黄色いマークをさせないだけなく、フォーカスの移動自体をしたくないのです。 よろしくおねがいします。

    • ベストアンサー
    • Flash
  • 難関にぶつかりました 

    はじめまして! まったくの初心者です。 参考書とかを見てもなかなか難しいです。 ActionScriptのバージョンは2.0です。 まず、以下のように四つのボタンがあります。 「A」,「B」,「C」という三つのボタンと、クリックすると次のページへ進む「次」ボタンがあります。これで、全部で四つのボタンです。 ここで、「A」,「B」,「C」各、「あ」、「い」、「う」データを持っています。 動きとしては以下のようです、、、 (1)、キーボートのTabキーを利用して「A」,「B」,「C」の任意ボタンを選択します。(2)、(1)で選択されたボタンを、キーボートのEnterキーをクリックして決定(マウスだとクリックと同じです。)します。この時「B」ボタンが持ってたデータはサーバに送られます。 (例として、キーボートのTabキー利用し「B」を選択した場合、キーボートのEnterキーを押下すると、「B」ボタンがクリックされ、ボタン「B」が持っていた情報を、サーバ上に送くります。) (3)、最後、もう一回Enterキーを押下すると、「次」ボタンと連動して次のページへ進みます。 以上、よろしくお願いします。

    • ベストアンサー
    • Flash
  • タブ切替ボタンからのフォーカス移動について

    いつもお世話になっています。 VisualStudio2005,Vistaで開発しています。 タブコントロールのタブ切替ボタンにフォーカスが当たっている状態で左右キーを押すと、 隣のボタンにフォーカスが移ると共にアクティブなタブが変更されます。 その状態でTabキーを押すと、該当タブページの先頭オーダーを持つコントロールにフォーカスが移りますが、 これと同じ動作を下キー、Enterキーで実現したいと考えています。 テキストボックス等ではkeypressイベント、keydownイベントでフォーカス制御ができましたが、 どうもうまくいきません。 個々のタブページでは両イベントが発生せず、タブコントロール本体ではイベント自体は起きるものの、 コンボボックスの内容を変更するために押した下キーにすら反応してしまいます。 何か良い解決方法はありませんでしょうか。 皆様のお知恵をお貸しいただけましたら幸いです。

  • LibreOfficeのcalcの行移動について

    セルの移動の際にキーボード操作で Enterキーで下方向のセルに移動、 ShiftキーとEnterキーで上方向のセルに移動 Tabキーで横方向移動なのですが、 Tabキーで横方向に移動した後に、 Enterキーで移動するとマイクロソフトエクセルと違い、 A1 → Tab → B1 →Enterと入力すると B2ではなくA2に移動してしまいます。 Tabで横移動した後にもEnterキーでB1、B2と移動するようにする方法は無いのでしょうか? もしご存知でしたら教えてください。よろしくお願いいたします。

  • Enterキーでフォームの入力フィールド移動をしたい

    フォームの入力項目間の移動を行うのに、普通はTABキーを使うよう なのですが、Enterキーで移動して、送信ボタンまで来たら、それ もEnterキーで送信という動作にしたいと思います。 しかし、入力項目のところでEnterキーを押すと、次の項目へ移動 するのではなく、送信ボタンが押されてしまいますよね? そうさせずに、上記のような動作をさせるにはどうすれば良いのでしょ うか? 同じような質問をどこかで見たような気がしたのですが、見つ けることができませんでした。よろしくお願いします。

  • タブダイアログのフォーカスの移動について

    タブダイアログを使った場合の フォーカスの移動についての質問です。 状態としましては フォームにタブ数3のタブダイアログがあり、 それぞれのタブに3つテキストボックスがあります。 また、タブダイアログとは別にフォーム上に 閉じるボタンが1つあります。 現在1つ目のタブの1つ目のテキストボックスに フォーカスがあり、Tabキーでフォーカスを 移動させていくのですが、 3つ目のテキストボックスでtabキーを押すと フォーカスがどこに行ったのか 行方不明になってしまいます。 なぜか2つ目と3つ目のタブの 3つ目のテキストからは 閉じるボタンへフォーカスが移動するのですが、 1つ目のテキストだけが行方不明になってしまいます。 (shift+tabで戻ってきません) また、3つ目のタブのキャプションからの フォーカス移動も行方不明となってしまうます。 タブインデックスは タブダイアログボックスが0 1つ目のタブの1つ目のテキストが1 1つ目のタブの2つ目のテキストが2 1つ目のタブの3つ目のテキストが3 2つ目のタブの1つ目のテキストが4        ・        ・ 3つ目のタブの3つ目のテキストが9 閉じるボタンが10 となっています。 タブダイアログのフォーカス移動を制御するには どうしたら良いのでしょうか? また、行方不明になってしまうフォーカスの 現在位置を見つけるようなことはできますでしょうか? よろしく回答のほどお願いします。

  • エクセル2010のTABキー設定を変えたい

    エクセル2010を使っています。 TABキーの設定が変えられるか知りたく質問します。 数か月前まではエクセル2003を使っていて、 全角数字入力→TABキー→右のセルに移動 をよく使っていました。 しかし、エクセル2010だと 全角数字入力→エンター→TABキー→右のセルに移動 と、エンターを押さないといけなくなってしまいました。 エクセル2003のようにTABキーを設定しなおすことはできるのでしょうか。 どなたか詳しい方がいましたら、ぜひとも教えていただけませんか。 よろしくお願い致します。

  • エディットでEnterキーでのTAB移動

    Win32APIを使ってプログラミングしています。 通常はTABでフォーカスを移動するのが良いと思うのですが、Enterキーで移動させたいと思います。 ところが、一行のエディットだとEnterキーを押すとビープ音が鳴ってしまいます。 フォーカス移動はできるのですが、ビープ音を鳴らないようにするにはどうすればいいのでしょう? 多分WM_KEYDOWNかWM_KEYUP、WM_CHARのどれかで書けばいいと思ってるんですが… よろしくお願いします。

  • ExcelのTab

    宜しくお願い致します Excel2007を使用しています、出来れば良いなと言うような質問ですが 例えば、図の様に数字A1から書きEnterを押さずにTabを押すと右側のセルに移動しますC1のセルまで書いて、Enterを押すとA2に移動します 行2もその様に移動します、そこで質問ですが B3に[ああ]と書きEnterで確定します、そのEnterを押した後は次から(C3)に5と書きEnterを2回押さないとA4に移動しません、其の後は必ずEnterを押してからTabを押さないと、次のセルに移動しませんが、結構大きな表ですので面倒です 最初の様にああと書いた以降もEnterを押さずにTabのみで移動は可能でしょうか 説明が分かりにくいので出来ましたらExcelで図のように書き込みして見て下さい質問内容が解ると思います。

  • enterキーでCGI起動

    度々質問をさせていただいております。 javascript、HTMLにお詳しい方教えてください。 HTMLでボタンを複数作りました。それぞれのボタン(aボタン、bボタン、cボタン)には、違うCGIが動くようにしています。マウスでクリックされずに、enterキーが押された時は、aボタンがクリックされたかのようにしたいのですが、どうコード作ればいいのか皆目検討がつかずに困っております。ボタンにフォーカスをあわしたりしてみたのですが、どうも上手くできません。ご回答よろしくお願いいたします。