c # Выключение системы после удержания да в течение 5 секунд - PullRequest
0 голосов
/ 09 ноября 2010

Мне было интересно, знает ли кто-нибудь, как использовать диалоговое окно для создания события удержания кнопки.Вот сценарий:

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

Я пытаюсь сделать это в сценарии «да нет», т. Е.

Чтобы подтвердить отключение, удерживайте «Да» в течение 5 секунд.

Любой, кто сделал это, прежде чем сможет предложить небольшую помощь / понимание

Ответы [ 9 ]

5 голосов
/ 09 ноября 2010

Попробуйте использовать событие Mouse_Down & Mouse_Up кнопки и таймер (предполагается, что вы используете WinForms).

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        if (this.timer1.Enabled == false)
        {
            this.timer1.Interval = 5000;
            this.timer1.Enabled = true;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        this.timer1.Enabled = false;
        MessageBox.Show("Shutdown!");
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        timer1.Enabled = false;
    }
4 голосов
/ 09 ноября 2010

Вы можете зафиксировать нажатие кнопки на «mousedown» и запустить 5-секундный таймер. Как только таймер завершает работу, начинается отключение. Если происходит событие «mouseup», оно может остановить и сбросить таймер.

2 голосов
/ 09 ноября 2010

Конечно, обработайте оба события mousedown и mouseup. Запустите таймер на mousedown и посмотрите, как долго он работает на mouseup. Готово!

1 голос
/ 09 ноября 2010

Вы можете сделать это любым количеством способов.Первое, что мне приходит в голову, - это раскрутить поток, который ждет 5 секунд и просто прерывается, если мышь пользователя возвращается.

    Thread shutdown;
    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        shutdown = new Thread(()=>ShutDown());
        shutdown.Start();
    }

    private void ShutDown()
    {
        Thread.Sleep(5000);
        Console.Write("5 seconds has elapsed");
        // Do something.
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        if (shutdown != null)
        {
            shutdown.Abort();
            shutdown = null;
        }
    }

Низкие издержки и вы не добавляете дополнительные вспомогательные элементы управленияза что-то такое простое.

0 голосов
/ 09 ноября 2010

Вы можете установить таймер для события MouseDown, и если захват мыши изменится (проверьте событие MouseCaptureChanged) на false, прежде чем сработает событие timer, отмените таймер.

0 голосов
/ 09 ноября 2010
private DateTime mouseDownTime;

private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
    mouseDownTime = DateTime.Now;
}

private void Button_MouseUp(object sender, MouseButtonEventArgs e)
{
    if (mouseDownTime.AddSeconds(5) < DateTime.Now)
        MessageBox.Show("You held it for 5 seconds!");
}
0 голосов
/ 09 ноября 2010

Когда пользователь впервые нажимает кнопку YES, запустите таймер, который неоднократно проверяет, находится ли местоположение мыши внутри кнопки. По истечении 5 секунд продолжите работу. Если пользователь перемещает мышь из кнопки, остановите таймер.

0 голосов
/ 09 ноября 2010

Вы можете использовать события Form.MouseDown, чтобы обнаружить, что пользователь нажал кнопку мыши.В обработчике событий проверьте, находится ли курсор над кнопкой или нет (событие передается в координатах курсора).Затем вы можете включить таймер, который будет срабатывать в течение 5 секунд, и выполнить отключение при срабатывании таймера.

0 голосов
/ 09 ноября 2010

Зачем беспокоиться, когда вы можете просто использовать getAsyncKeyState ()? Скажите им, чтобы удерживать «у» в течение 5 секунд. Вы можете найти ссылку здесь: http://www.pinvoke.net/default.aspx/user32.getasynckeystate

Или вы можете сделать это по-своему и запустить таймер на MouseDown, затем на MouseUp, завершить таймер и посмотреть, больше или меньше 5 секунд. http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousedown%28VS.71%29.aspx

...