none
C# 如何同时获取多个按键值? RRS feed

  • 问题

  • KeyDown事件 KeyEventArgs e   的e.key  只能在同一时间内获取一个按键。怎么能同时获取多个?
    2012年7月18日 7:51

答案

  • 可试一下自已记录来处理它,如下,

    private string comboKeys = string.Empty;
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    	if (comboKeys.Contains(e.KeyCode.ToString()) == false)
    	{
    		comboKeys += e.KeyCode.ToString();
    	}
    }
    
    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
    	comboKeys = comboKeys.Replace(e.KeyCode.ToString(), string.Empty );
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
    	MessageBox.Show(comboKeys);
    }


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 MaJiXiang 2012年7月21日 6:34
    2012年7月18日 9:20
  • Hi MaJiXiang,

      你可以下面的代码:

     
    private void DrawArea_KeyUp(object sender, KeyEventArgs e)
    {  
    
               if ((e.Control) && e.KeyCode == Keys.C)
                {
                       Console.Write("你按下了ctrl + C");
                }
    
    }
    

       如果是多个按键的话,那就用switch判断来找到所有按下的键。

     


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 MaJiXiang 2012年7月20日 11:59
    2012年7月20日 6:43
    版主

全部回复

  • 可试一下自已记录来处理它,如下,

    private string comboKeys = string.Empty;
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    	if (comboKeys.Contains(e.KeyCode.ToString()) == false)
    	{
    		comboKeys += e.KeyCode.ToString();
    	}
    }
    
    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
    	comboKeys = comboKeys.Replace(e.KeyCode.ToString(), string.Empty );
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
    	MessageBox.Show(comboKeys);
    }


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 MaJiXiang 2012年7月21日 6:34
    2012年7月18日 9:20
  • 这种方式需要触发多次KeyDown才能累加上多个键位。当我同时按下左键和右键的时候能不能在一次KeyDown中都获取到。
    2012年7月18日 9:42
  • 左键+右键 = null...

    好像无法这样做呢


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年7月18日 10:48
  • 用HOOK来做吧~这样是可以做到的。

    2012年7月20日 3:36
  • Hi MaJiXiang,

      你可以下面的代码:

     
    private void DrawArea_KeyUp(object sender, KeyEventArgs e)
    {  
    
               if ((e.Control) && e.KeyCode == Keys.C)
                {
                       Console.Write("你按下了ctrl + C");
                }
    
    }
    

       如果是多个按键的话,那就用switch判断来找到所有按下的键。

     


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 MaJiXiang 2012年7月20日 11:59
    2012年7月20日 6:43
    版主
  • .NET好像只提供了SHIFT 、ALT、CTRL 三个键位的判断可以组合其他键位。而e.KeyCode只能获取一个值。如果我想 A键+B键 是不是就不行了啊? 


    2012年7月20日 12:22
  • 您好,

    Control Key就是那3个,您可以使用我上面说的方式的呀!


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年7月21日 5:52