我现在有一个看起来像这样的函数:
public static bool IsKeyDownWithDelayPassed(Keys key, int delay)
{
bool timeElapsed = stopWatch.ElapsedMilliseconds > delay;
bool isKeyDown = currentKeyboardState.IsKeyDown(key);
if (timeElapsed && isKeyDown)
{
stopWatch.Restart();
}
return timeElapsed && isKeyDown;
}
这很好用,但一次只能用一个键。例如,如果我想使用箭头键并进行对角线移动(同时按住向右和向下箭头键),它就不起作用。
我想到了一个解决方案,它涉及一个 Dictionary
,它将 Keys
映射到 Stopwatch
es,但这似乎有点过于复杂。我是否遗漏了可以简化此任务的内容?
谢谢。
最佳答案
使用这个:
Dictionary<Keys, DateTime> keytimes = new Dictionary<Keys, DateTime>();
public bool IsKeyDownWithDelayPassed(Keys key, long delay)
{
if(!keytimes.Keys.Contains(key) || keytimes[key] == DateTime.MinValue)
return false;
long elapsed = DateTime.Now.Ticks - keytimes[key].Ticks;
return delay < elapsed;
}
private void KeyDownEvent(object sender, KeyEventArgs e)
{
keytimes[e.KeyData] = DateTime.Now;
}
private void KeyUpEvent(object sender, KeyEventArgs e)
{
keytimes[e.KeyData] = DateTime.MinValue;
}
关于c# - 如何编写一个函数来确定一个键是否按下并经过延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001598/