[英]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.