按住键时按键速度

时间:2014-06-11 19:43:54

标签: c# keypress

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

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

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

4 个答案:

答案 0 :(得分:1)

我会用这样的东西:

private int counter = 0;

//...

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

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

答案 1 :(得分:1)

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

将其拉出并阅读
            System.Environment.KeyboardDelay

此外,此问题已在此处得到解答:Keydown event - cool down

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

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

记录接收的按键次数,并仅在该数字的模数上更改图片。