2013-11-14 50 views
1

我有禁用鎖屏,並停止在窗口服務的程序。我有兩個按鈕啓用,禁用和具有預設時間的組合框。當我的程序運行並且用戶點擊啓用時,程序應該禁用鎖定屏幕,直到用戶手動點擊禁用 。我試圖完成的是如果用戶永遠不會禁用,那麼程序就不會整夜運行。因此,通過從組合框中選擇一個預設時間,程序將自動禁用它。c。與時間計時器#組合框經過

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     DateTime time = DateTime.Today; 
     for (DateTime _time = time.AddHours(16); _time < time.AddHours(18); _time = _time.AddMinutes(30)) 
     { 
      comboBox1.Items.Add(_time.ToShortTimeString()); 
     } 
    } 

    private static System.Timers.Timer _Timer; 
    private DateTime _lastRun = DateTime.Now; 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string strTime_Start = DateTime.Today.ToString(); 
     string strTime_End = comboBox1.SelectedItem.ToString(); 
    } 

    public void button1_Click(object sender, EventArgs e) 
    { 
     button1.Enabled = false; 
     button2.Enabled = true; 


     _Timer = new System.Timers.Timer(10 * 60 * 1000); 
     _Timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 

     DisableLock(); 
    } 

    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 

     if (strTime_End < DateTime.Now.Date) //I think this would be where I need to have strTime_End? 
     {   
      _Timer.Stop(); 

      _lastRun = DateTime.Now; 



     } 
    } 


} 
+0

我不確定您需要哪方面的幫助。你有幾件事情需要考慮:一個工作的regkey更換器,一個服務,一個UI更新和一個狀態檢查,你特別*需要幫助的部分? –

+0

Adam Kewley如果在組合框中選擇的時間已過(例如16:00),則需要繼續並停止計時器。難道是像 '如果(strTime_End user2190928

回答

0

從我的理解,到目前爲止,你可以添加:

comboBox1.Enabled = FALSE;

當時間已逝,即在事件中。

+0

我改寫了我要怎樣做。 我有一個程序,禁用鎖屏和停止在Windows服務。我有兩個按鈕啓用,禁用和具有預設時間的組合框。當我的程序運行並且用戶點擊啓用時,程序應該禁用鎖定屏幕,直到用戶手動點擊禁用 。我試圖完成的是如果用戶永遠不會禁用,那麼程序就不會整夜運行。因此,通過從組合框中選擇一個預設時間,程序將自動禁用它。 – user2190928

1

在我腦海中最簡單的解決辦法是保持一個實例變量爲你的停止時間,每個組合框項目必須設置該停止時,timer_tick事件只會檢查它是否已經通過了時間。組合框中的空白項目可以清除變量。

private DateTime timeToStop; 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     timeToStop = DateTime.Now.Add(DateTime.Parse(comboBox1.Text)); 
    } 
    catch(Exception) 
    { 
     timeToStop = new DateTime(3000, 01, 01, 00, 00, 00); 
    } 
} 

public void disableButton_Click(object sender, EventArgs e) 
{ 
    _Timer.Stop(); 
    _lastRun = DateTime.Now; 
} 

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    if (DateTime.Now >= timeToStop) 
    { 
     _Timer.Stop(); 
     _lastRun = DateTime.Now; 
     // Disable regkey 
    } 
} 
+0

我似乎無法得到'timeToStop = DateTime.Now.Add(DateTime.Parse(comboBox1.Text));'工作。我不斷收到錯誤參數「1」:無法從「System.DateTime的」到「System.TimeSpan」轉換。不知道我有什麼錯。 – user2190928

+0

'timeToStop = DateTime.Now.Add(TimeSpan.Parse(comboBox1.Text));'。你要運行到與你的未來項目的日期和時間工作的幾個問題,我的建議是閱讀了MSDN日期時間和時間跨度的ToString().Parse()方法,看看它們是如何工作的。決定一個近乎通用的格式,在你的項目(存儲和計算)中很容易理解,然後擔心用戶本地時間文化只是一個顯示問題。 –

+0

並執行嚴格的輸入格式(根據您的經驗您的或他們的) –