有没有办法增加同一按键的一个按键事件和下一个按键事件之间的延迟?
我有一个应用程序,用户可以使用向下/向上键滚动图像。他们可以按下再松开,也可以一直按下去。有时,当用户始终保持向上/向下按键时,他们想要更快地滚动。一个按键事件和下一个按键事件之间的持续时间我相信是由Windows控制的,所以比方说,如果我打开记事本,键入字母"a“并按住键,那么我看到的速度是基于我相信的Windows控件的参数。
我可以在运行时在C#程序中更改该速度吗?一旦用户关闭应用程序,然后返回到正常的速度。
发布于 2014-06-12 03:50:35
我会使用类似这样的东西:
private int counter = 0;
//...
private void OnKeyDown(...)
{
counter++;
if (counter == <value>) //it is based on the speed
{
counter = 0;
this.scrollDown();
}
}或者,您可以使用Timer,仅在经过一段时间后才允许向下滚动。只需使用全局bool,并在调用scrollDown方法时计时器滴答为false时将其设置为true。
发布于 2014-06-12 03:53:38
这是一个系统范围的设置-您可以打开它并通过查看
System.Environment.KeyboardDelay更多,这个问题已经在这里得到了回答:Keydown event - cool down
如前所述,不建议修改该值,并且可能会涉及许多额外的权限设置。最好采用ps2goat提到的方法,创建一个计时器、线程或操作来检查按键的状态,并相应地将其传递给幻灯片放映控件。
发布于 2014-06-12 03:55:30
要做到这一点,最简单的方法是在窗体上为KeyDown和KeyUp事件创建事件,检查正在按下/释放的键并跟踪这些键及其被按下的时间,创建滚动和滚动图像数量的比例。
在窗体上为下面的TimerTick方法创建一个新计时器
类似这样的代码(未测试,将不会编译):
bool KeyIsDown = false;
int count = 0;
void OnKeyDown(sender, key e) //This Needs to match the event to call KeyDown
{
if(e.key == KeyToScroll)
{
KeyIsDown = true;
count = 0;
e.handled = true;
}
}
void OnKeyUp(sender, key e) //This Needs to match the event for KeyUp
{
if(e.key = KeyToScroll)
{
KeyIsDown = false;
e.handled = true;
}
}
void TimerTick() //This needs to match the Timer_OnTick event
{
if(KeyIsDown)
{
count++;
ScrollImage()
}
}
void ScrollImage()
{
//TODO Scroll image based on count (how long the button has been pressed)
}https://stackoverflow.com/questions/24171302
复制相似问题