【发布时间】:2010-12-12 09:18:13
【问题描述】:
在这个应用程序中,我需要能够停止来自按下的键的响应,以防止不必要的数据进入输出。我遇到的问题是,使用下面代码中的方法确实可以防止按键重复,但也会阻止它们足够响应 - 因为用户非常快速地敲击按键。
我不确定这是我的硬件、api 限制还是我的代码有问题,但我下面的例程并不能简单地以足够快的速度运行而不会使程序无法使用。一种识别键是否被主动按下(以及持续多长时间)的方法也将有助于程序的另一个功能并解决当前的问题。
有什么想法吗?
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = isKeyDown;
isKeyDown = true;
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
isKeyDown = false;
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!isStreamPlaying) return;
if (e.KeyChar.Equals('d') || e.KeyChar.Equals('j'))
{
//red hit
SoundPlayer hitSounds = new SoundPlayer(taikoLiveMapper.Properties.Resources.normal_hitnormal);
hitSounds.Play();
outputlist.Add(string.Format("320,240,{0},1,{1}", ms, 0));
lastms = ms;
}
else if (e.KeyChar.Equals('s') || e.KeyChar.Equals('k'))
{
//blue hit
SoundPlayer hitSounds = new SoundPlayer(taikoLiveMapper.Properties.Resources.normal_hitclap);
hitSounds.Play();
outputlist.Add(string.Format("320,240,{0},1,{1}", ms, 8));
lastms = ms;
}
}
【问题讨论】:
-
API 太慢了,无法完成我想要它做的事情。我不得不使用 DirectInput 处理所有这些代码,以便将它放在我想要的位置。
标签: c# winforms keypress keydown