按下键时的按键速度

本文关键字:速度 | 更新日期: 2023-09-27 18:08:17

是否有办法增加一个按键事件和下一个键之间的延迟?

我有一个应用程序,用户可以使用向下/向上键滚动图像。他们可以按下然后松开,也可以一直按下去。有些时候,当用户一直按上/下键时,他们想要更快地滚动。一个按键事件和下一个按键事件之间的持续时间我认为是由Windows控制的,所以让我们说,如果我打开记事本并输入字母"a"并按住键,那么我看到的速度是基于我认为Windows控制的参数。

我可以改变我的c#程序运行时的速度吗?一旦用户关闭应用程序,然后返回到正常的速度。

按下键时的按键速度

这是一个系统范围的设置-您可以通过查看

将其拉出并读取它
            System.Environment.KeyboardDelay

更多,这个问题已经在这里得到了回答:Keydown事件-冷却

如前所述,不建议修改该值,并且可能涉及许多额外的权限设置。最好采用ps2goat提到的方法,创建一个计时器、线程或Action来检查按下键的状态,并相应地将其传递给幻灯片显示控件。

最简单的方法是在表单上为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)
}

我会这样写:

private int counter = 0;
//...
private void OnKeyDown(...)
{
   counter++;
   if (counter == <value>) //it is based on the speed
   {
       counter = 0;
       this.scrollDown();
   }
}

或者您可以使用Timer,只有在一段时间过去后才能向下滚动。当调用scrollDown方法时,只需使用全局bool并将其设置为true,当计时器将a指向false时。

记录接收到的按键次数,并仅以该数字的模数更改图片