none
押されたキーを判断する RRS feed

  • 質問

  • VS2002で、

    e.KeyCode  == Keys.Back || e.KeyCode == Keys.Left || e.KeyCode == Keys.Shift

    としていたものをVS2005に書き換えようとしています。調べたところいろいろと書き方があるようです。それで、

    e.KeyChar == '\b' || e.KeyChar == (char)Keys.Left  || e.KeyChar == (char)Keys.Shift

    としてみましたが、最後のシフトキーのところがエラーになってしまいます。

     

    どのように書くのがよいのでしょうか。お教え願います。

     

    2009年1月21日 23:20

回答

  • 外池と申します。

     

    まず「そもそも論」ですが、開発環境のVSが2002から2005になったからと言って、KeyCodeで情報を得ていたものを、KeyCharに変更しないといけない理由は何でしょうか?

     

    次にKeyCodeプロパティーの型は、Keys列挙体です。これは、キーボードの各キーの情報を得ることができます。KeyCharプロパティーはChar型であってキーボードが押された結果どのような文字が入力されたかという文字の情報を得ることができます。ですので、Char型のKeyCharではシフトキーの情報が得られないことは自明かと思います。

     

     

     

    2009年1月22日 0:10
  • おはようございます!(^^)!ふ~です。

     

    シフトキーの押下検出は『e.Shift』でできるようです。

    void Form1_KeyUp(object sender, KeyEventArgs e)

    void Form1_KeyPress(object sender, KeyPressEventArgs e)

    では上手くないようです。

     

    Code Snippet

    using System;
    using System.Windows.Forms;
    using System.Diagnostics;

    namespace keyInputTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.KeyDown += new KeyEventHandler(Form1_KeyDown);
            }

            void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Left || e.Shift == true)
                {
                    Debug.WriteLine("選択成功");


                    if (e.Shift) Debug.WriteLine("シフトキーが押下されました");
                }
                Debug.WriteLine(e.KeyData.ToString());
            }
        }
    }

    2009年1月22日 1:30
  • 元の要求次第ですが、どうなんだろう?

     

    1.別のキーが押されたときに、Shiftキーが押し下げられたままかを判定したい。

    2.Shiftキーが押されたことを検出したい。

     

    1ならe.Shiftを見るという選択肢で良いですが、2ならちょっと違うと思います。

    2009年1月22日 14:10
    モデレータ

すべての返信

  • 外池と申します。

     

    まず「そもそも論」ですが、開発環境のVSが2002から2005になったからと言って、KeyCodeで情報を得ていたものを、KeyCharに変更しないといけない理由は何でしょうか?

     

    次にKeyCodeプロパティーの型は、Keys列挙体です。これは、キーボードの各キーの情報を得ることができます。KeyCharプロパティーはChar型であってキーボードが押された結果どのような文字が入力されたかという文字の情報を得ることができます。ですので、Char型のKeyCharではシフトキーの情報が得られないことは自明かと思います。

     

     

     

    2009年1月22日 0:10
  • おはようございます!(^^)!ふ~です。

     

    シフトキーの押下検出は『e.Shift』でできるようです。

    void Form1_KeyUp(object sender, KeyEventArgs e)

    void Form1_KeyPress(object sender, KeyPressEventArgs e)

    では上手くないようです。

     

    Code Snippet

    using System;
    using System.Windows.Forms;
    using System.Diagnostics;

    namespace keyInputTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.KeyDown += new KeyEventHandler(Form1_KeyDown);
            }

            void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Left || e.Shift == true)
                {
                    Debug.WriteLine("選択成功");


                    if (e.Shift) Debug.WriteLine("シフトキーが押下されました");
                }
                Debug.WriteLine(e.KeyData.ToString());
            }
        }
    }

    2009年1月22日 1:30
  • 元の要求次第ですが、どうなんだろう?

     

    1.別のキーが押されたときに、Shiftキーが押し下げられたままかを判定したい。

    2.Shiftキーが押されたことを検出したい。

     

    1ならe.Shiftを見るという選択肢で良いですが、2ならちょっと違うと思います。

    2009年1月22日 14:10
    モデレータ
  • 返事が遅れて申し訳ありません。外池さんのご指摘通りそのままで大丈夫だったものですから、そのままアプリ作成に夢中になってしまっていました。

    外池さん、!(^^)!ふ~さん、Azuleanさん、貴重なアドバイスありがとうございました。

     

    2009年1月22日 23:39