Что ж, KeyDown довольно не важен для определения продолжительности нажатия пальца. Использование пальца относится к событиям Click
, MouseDown
, MouseUp
и MouseMove
.
Чтобы получить поведение, которое вам нужно, вам могут быть интересны следующие события: MouseDown
и MouseUp
.
Я предлагаю лучший способ сделать это - создать свой собственный базовый класс управления. Вот что я сделал ранее (не проверял, но должен дать вам общее представление о том, что делать):
public partial class BaseControl : UserControl
{
public BaseControl()
{
InitializeComponent();
base.MouseDown += new MouseEventHandler(BaseControl_MouseDown);
base.MouseUp += new MouseEventHandler(BaseControl_MouseUp);
MouseHeldTimer = new Timer();
MouseHeldTimer.Interval = 2000;
MouseHeldTimer.Tick += new EventHandler(mouseHeldTimer_Tick);
}
protected Timer MouseHeldTimer;
protected bool MouseIsDown;
void mouseHeldTimer_Tick(object sender, EventArgs e)
{
this.MouseHeldTimer.Enabled = false;
if (this.MouseHeldDown != null)
{
this.MouseHeldDown(sender, e);
}
}
void BaseControl_MouseDown(object sender, MouseEventArgs e)
{
this.MouseHeldTimer.Enabled = true;
}
void BaseControl_MouseUp(object sender, MouseEventArgs e)
{
this.MouseHeldTimer.Enabled = false;
}
public event MouseHeldDownHandler MouseHeldDown;
public delegate void MouseHeldDownHandler(object sender, EventArgs e);
}
Обычно MouseHeldTimer запускается с интервалом в 2 секунды, как только пользователь прикасается пальцем к экрану. Если пользователь поднимает палец, таймер останавливается. Если палец пользователя не активен более 2 секунд, событие делегата MouseHeldDown
сработает. Затем вы можете зафиксировать это событие в своей форме, выполнив следующие действия:
control.MouseHeldDown+= new EventHandler(control_MouseHeldDown);
В качестве альтернативы, если вы заботитесь только о форме, вы можете просто использовать событие DoubleClick
формы, так как оно сработает после удерживания мыши в течение секунды или двух.