Как узнать, сколько миллисекунд нажата клавиша KEY? - PullRequest
0 голосов
/ 28 октября 2019

Я просто использовал горячие клавиши для создания хода в игре. Я хотел добавить клавиши удержания на X время. Я хотел узнать, есть ли способ узнать, сколько миллисекунд нажата клавиша?

Ответы [ 2 ]

1 голос
/ 28 октября 2019
public partial class Test : Form
{
   private int _iteration = 0;
    private Stopwatch _sw;
    private int _pressedKey;

    public Test()
    {
        InitializeComponent();
    }

    private void Test_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == _pressedKey) return;
        _iteration++;
        _sw = new Stopwatch();
        _sw.Start();
        _pressedKey = e.KeyValue;
    }

    private void Test_KeyUp(object sender, KeyEventArgs e)
    {
        _pressedKey = -1;
        label1.Text = $"Iteration:{_iteration}. Elapsed: {_sw.ElapsedMilliseconds}ms";
    }
}
1 голос
/ 28 октября 2019

Сначала создайте пару членов класса для хранения, какая клавиша была нажата и какое время.

private KeyChar _pressedKey;
private Stopwatch _keyPressStopwatch = new Stopwatch();

Затем напишите ваш обработчик событий KeyDown, чтобы значения были введены в эти переменные:

private void KeyPressed(object sender, KeyEventArgs e)
{
    _keyPressStopwatch.Restart();
    _pressedKey = e.KeyChar;
}

Теперь напишите обработчик событий KeyUp, чтобы выполнить остальную часть работы:

private void KeyReleased(object sender, KeyEventArgs e)
{
    if (e.KeyChar != _pressedKey)  // We only care about the last key pressed.
        return;

    _keyPressStopwatch.Stop();
    double milliseconds = _keyPressStopwatch.ElapsedMilliseconds;

    // milliseconds is now how long the key was pressed. Do something with it.
}

Не забудьте подписаться на события KeyDown и KeyUp для любого элемента управления, с которым связанс этим.

РЕДАКТИРОВАТЬ

В комментариях был поднят отличный момент о точности синхронизации, поэтому я переключил код с использования DateTime.UtcNow на использование Stopwatch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...