#c# #timer #keydown #keyup
#c# #таймер #нажатие клавиши #ввод
Вопрос:
Я хочу измерить время (секунды), когда пользователь нажимает клавишу со стрелкой вправо на клавиатуре и поднимает ее.
Я исследовал это и нашел какую-то страницу, но хорошего ответа нет.
Как я могу измерить это время?
мой код
Я определяю список в верхней части класса:
List<int> date_down = new List<int>();
когда пользователь нажимает клавишу со стрелкой вправо: (в методе Form_KeyDown)
if (Keyboard.IsKeyDown(Key.Right))
{
date_down.Add(DateTime.Now.Second);
}
когда пользователь нажимает клавишу со стрелкой вправо и удерживает нажатой, время добавляется в список
когда пользователь нажимает клавишу (в методе Form_keyUp)
if (e.Key == Key.Right)
{
var second = DateTime.Now.Second - date_down[0];
}
Комментарии:
1. Можете ли вы включить код или конкретные примеры того, что вы пробовали до сих пор? Можете ли вы также более конкретно рассказать о проблеме, которую вы пытаетесь решить? Вы хотите измерить это в своем приложении, на компьютере, например, с помощью кейлоггера? Это в игровой ситуации или просто бизнес-приложение?
2. Запустите секундомер при нажатии клавиши, завершите его при нажатии клавиши. Вычислите разницу.
3. @NicholausLawson я пишу свой код. я хочу использовать это для перемотки фильма вперед или назад.
Ответ №1:
Это может быть альтернативой
using System.Diagnostics;
using System.Windows.Forms;
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
var watch = new Stopwatch();
KeyDown = (s, e) => watch.Start();
KeyUp = (s, e) => {
watch.Stop();
var elapsed = watch.ElapsedMilliseconds; // Duration
watch.Reset();
};
}
}
Комментарии:
1. Это лучшая и наиболее точная альтернатива!
2. Хороший ответ и, честно говоря, более полезный, чем мой, если вы ищете конкретный пример для изучения.
Ответ №2:
Ваш код — хорошее начало, хотя вам, возможно, придется немного изменить его, чтобы увидеть, что он работает.
private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.Key == Key.Right)
{
date_down = DateTime.Now;
}
e.Handled = true;
}
private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.Key == Key.Right)
{
var timeDelta = DateTime.Now - date_down;
}
}
Вы также можете запустить таймер из этого, если хотите, вместо того, чтобы захватывать текущее время и оценивать.
Комментарии:
1. Код в этом ответе будет работать по назначению только один раз.
Ответ №3:
Вы могли бы начать с поиска различных классов для измерения времени в C #, таких как этот.
Вам также понадобится класс для определения нажатия клавиш вниз и вверх. Возможно, это могло бы помочь.
Помимо этого, реализация должна быть довольно простой. Запускает таймер, когда клавиша нажата, останавливает таймер, когда клавиша отпущена, и использует это время в качестве измерения между двумя событиями.
Комментарии:
1. спасибо, но как я могу запускать и останавливать таймер и измерять время между этим? у вас есть какой-нибудь пример кода?
2. @saedbfd Я просмотрел твою правку. Обратите внимание на список. Метод Add добавит значение в конец списка, а не в начало. Итак, в вашей текущей реализации всякий раз, когда вы нажимаете клавишу, он сравнивает ее с первым нажатием клавиши, а не с последним.