c#测量键盘keydown和keyup之间的间隔?

时间:2016-10-20 16:05:51

标签: c# timer keydown keyup

我想测量用户按下键盘上的右箭头键然后拿起它的时间(秒)。

我已经研究了这个并找到了一些页面,但没有一个好的答案。

我该如何衡量这段时间?

我的代码

我在课堂顶部定义了一个List:

List<int> date_down = new List<int>();

当用户按右箭头键时:(在Form_KeyDown方法中)

if (Keyboard.IsKeyDown(Key.Right))
{
    date_down.Add(DateTime.Now.Second);
}

当用户按下右箭头键并按住时间添加到列表中

当用户拿起密钥时(在Form_keyUp方法中)

if (e.Key == Key.Right)
{
    var second = DateTime.Now.Second - date_down[0];
}

3 个答案:

答案 0 :(得分:4)

这可能是另一种选择

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

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();

        var watch = new Stopwatch();
        KeyDown += (s, e) => watch.Start();
        KeyUp += (s, e) => { 
            watch.Stop();
            var elapsed = watch.ElapsedMilliseconds;    // Duration
            watch.Reset();
        };
    }
}

答案 1 :(得分:0)

您的代码是一个良好的开端,但您可能需要对其进行一些修改以使其正常工作。

private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e)
{        
    if (e.Key == Key.Right)
    {
        date_down = DateTime.Now;
    }
    e.Handled = true;
}

private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e)
{ 
    if (e.Key == Key.Right)
    {
        var timeDelta = DateTime.Now - date_down;
    }
}

如果需要,您也可以从此触发计时器,而不是抓取当前时间并进行评估。

答案 2 :(得分:-1)

您可以从查找用于在C#中测量时间的各种类开始,例如this one

您还需要一个用于检测按键和按键的类。 Perhaps this might help

除此之外,实施应该相当简单。按下键时启动计时器,释放键时停止计时器,并使用该时间作为两个事件之间的测量值。