簡體   English   中英

c#按住yes 5秒鍾后關閉系統

[英]c# Shutdown a system after holding yes for 5 seconds

我想知道是否有人知道如何使用對話框創建按下按鈕事件。 這是場景:

用戶想關閉其系統,但是由於確認這一點很重要,因此用戶必須按住按鈕5秒鍾才能執行操作。

我正在嘗試在是或否的情況下做到這一點。

要確認關閉,請按住“是” 5秒鍾。

在提供一些幫助/見解之前,有人這樣做過嗎?

嘗試使用按鈕的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;
    }

您可以捕獲“ mousedown”上的按鈕按下,並啟動5秒鍾計時器。 計時器完成后,將啟動關機。 如果發生“ mouseup”事件,它將停止並重置計時器。

當然,請同時處理mousedown事件和mouseup事件。 在mousedown上啟動一個計時器,並查看它在mouseup上運行了多長時間。 做完了!

您可以通過多種方法來執行此操作。 我想到的第一個方法是剝離一個等待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;
        }
    }

開銷低,並且您無需為此簡單的操作添加其他支持控件。

當您僅可以使用getAsyncKeyState()時為什么要打擾? 告訴他們按住“ y” 5秒鍾。 您可以在此處找到參考: http : //www.pinvoke.net/default.aspx/user32.getasynckeystate

或者,您可以按照自己的方式進行操作,並在MouseDown上啟動計時器,然后在MouseUp上,結束計時器,然后查看計時器是否大於或小於5秒。 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.mousedown%28VS.71%29.aspx

您可以使用Form.MouseDown事件來檢測用戶是否已按下鼠標按鈕。 在事件處理程序中,檢查光標是否在按鈕上方(事件在光標的坐標中傳遞)。 然后,您可以啟用將在5秒鍾內滴答的計時器,並在計時器滴答時執行關機。

當用戶第一次單擊“是”時,啟動一個計時器,該計時器反復檢查鼠標的位置是否在按鈕內。 5秒鍾后,請繼續關機。 如果用戶將鼠標移出按鈕,請停止計時器。

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!");
}

您可以在MouseDown事件上設置一個計時器,如果在觸發該計時器事件之前鼠標捕獲的變化(檢查MouseCaptureChanged事件)為false,則取消該計時器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM