CF keyDown событие (приурочено) - PullRequest
1 голос
/ 11 мая 2010

Мне нужно событие для моего приложения CF, которое сработало бы после того, как пользователь нажал и удерживал палец на элементе управления в течение 2 секунд. Какое событие можно использовать, поскольку событие keyDown уже используется.

1 Ответ

2 голосов
/ 11 мая 2010

Что ж, 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 формы, так как оно сработает после удерживания мыши в течение секунды или двух.

...