none
スペースキーはWindowsでは特定な機能に使われているのですか? RRS feed

  • 質問

  • スペースキーを押すと、フォーカスの当たっているるコントロールをクリックしたような動きになります。
    スペースキーを押した時のこのような機能を停止させることはできませんか?

    Windowsではこのようにスペースキーを使うようになっているのですか?
    そうだとすると、スペースキーは独自の機能では使わない方が良いのですか?

    2012年5月30日 5:49

回答

  • 例えばCheckBoxならこんな感じでしょうか(押されてしまっているわけですが)

    bool flg = false;
    
    private void checkBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Space)
        {
            flg = true;
        }
    }
    
    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (flg == true)
        {
            flg = false;
            checkBox1.Checked = !checkBox1.Checked;
        }
    }

    > Windowsではこのようにスペースキーを使うようになっているのですか?
    > そうだとすると、スペースキーは独自の機能では使わない方が良いのですか?

    これ自体は仕様だと思いますけど、スペースキーをどのように使おうと思っているのでしょうか。
    それによっては何かいいアイデアをお持ちの方もいるかもしれません。

    • 回答としてマーク クサキ 2012年5月30日 8:39
    2012年5月30日 6:11
  • Windows ユーザー エクスペリエンス ガイドラインというドキュメントがあります。相当膨大でPDF形式で1,000ページ近くにのぼります。このガイドラインに沿ってWindowsは設計されています。アプリケーションを開発する際にもこのガイドラインに沿うことでユーザーが混乱しないUIを提供できます。

    この中でキーボード操作についても言及されていて、スペースキーについては

    Space キー、Enter キー、Esc キー。Space キーは入力フォーカスのあるコントロールをアクティブ化するのに対し、Enter キーは既定のボタンをアクティブ化します。Esc キーを押すと、ウィンドウが取り消されるか、閉じられます。

    となっています。何十年も続いている基本動作ですので、独自の機能では使わない方がいいです。

    • 回答としてマーク クサキ 2012年5月30日 8:39
    2012年5月30日 6:20
  • 参考となる文書としては、

    Button クラス
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.button(v=vs.100).aspx

    に、以下のように書かれています。

    ----- 引用開始 ---------------------------------------------------

    Button は、マウスを使用してクリックできます。ボタンにフォーカスがある場合は Enter キーまたは Space キーを使用することもできます。

    ----- 引用終了 ---------------------------------------------------


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク クサキ 2012年5月30日 8:40
    2012年5月30日 6:51
    モデレータ

すべての返信

  • 例えばCheckBoxならこんな感じでしょうか(押されてしまっているわけですが)

    bool flg = false;
    
    private void checkBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Space)
        {
            flg = true;
        }
    }
    
    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (flg == true)
        {
            flg = false;
            checkBox1.Checked = !checkBox1.Checked;
        }
    }

    > Windowsではこのようにスペースキーを使うようになっているのですか?
    > そうだとすると、スペースキーは独自の機能では使わない方が良いのですか?

    これ自体は仕様だと思いますけど、スペースキーをどのように使おうと思っているのでしょうか。
    それによっては何かいいアイデアをお持ちの方もいるかもしれません。

    • 回答としてマーク クサキ 2012年5月30日 8:39
    2012年5月30日 6:11
  • Windows ユーザー エクスペリエンス ガイドラインというドキュメントがあります。相当膨大でPDF形式で1,000ページ近くにのぼります。このガイドラインに沿ってWindowsは設計されています。アプリケーションを開発する際にもこのガイドラインに沿うことでユーザーが混乱しないUIを提供できます。

    この中でキーボード操作についても言及されていて、スペースキーについては

    Space キー、Enter キー、Esc キー。Space キーは入力フォーカスのあるコントロールをアクティブ化するのに対し、Enter キーは既定のボタンをアクティブ化します。Esc キーを押すと、ウィンドウが取り消されるか、閉じられます。

    となっています。何十年も続いている基本動作ですので、独自の機能では使わない方がいいです。

    • 回答としてマーク クサキ 2012年5月30日 8:39
    2012年5月30日 6:20
  • 参考となる文書としては、

    Button クラス
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.button(v=vs.100).aspx

    に、以下のように書かれています。

    ----- 引用開始 ---------------------------------------------------

    Button は、マウスを使用してクリックできます。ボタンにフォーカスがある場合は Enter キーまたは Space キーを使用することもできます。

    ----- 引用終了 ---------------------------------------------------


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク クサキ 2012年5月30日 8:40
    2012年5月30日 6:51
    モデレータ
  • 急いで押す必要があったり、暗い部屋で押す必要があったりで、
    なるべく大きなキー(最近はそれほど大きくもなくなっていますが)を使いたかったからでした。

    ご案内のコードもありますが、フォーム上の全てのコントロールに
    コーディングするのは面倒ですし、外のキーを検討します。

    2012年5月30日 8:39