2010-05-02 47 views
1

在上班期間爲我的老闆工作一個方便的計劃,作爲暑期項目,以便讓她更輕鬆,練習和提高自己的技能。意圖是讓她快速簡單地計算出這個人工作的小時數和分鐘數。表格本身有一系列文本框,用於該周的每天的時鐘輸入和輸出時間。目前,它試圖將txtbox文本轉換爲Date變量,然後.Subtract()從最後開始,並將其存儲在窗體底部顯示的滾動總變量中。我不禁想到有一個更好的方法去做這件事,而且我絕對肯定,21次(7天,3班)的下面的代碼塊效率不高。VB時間輸入,更好的方法呢?

Dim StartTime As Date 
    Dim EndTime As Date 
    Dim Worked As System.TimeSpan 
    Dim WorkedTotal As System.TimeSpan 
    If chkFirst.Checked = True Then 
      StartTime = CDate(txtMonStart.Text) 
      EndTime = CDate(txtMonEnd.Text) 
      EndTime = EndTime.AddHours(12) 
      Worked = EndTime.Subtract(StartTime) 
      lblMonWork.Text = Worked.ToString() 
      WorkedTotal += Worked 

目前它的工作,主要是。用戶必須在時間輸入中輸入「:」,如果總時間超過24小時,則顯示一天的列(40小時12分鐘工作周顯示爲1.16:12)。我想消除這兩種非計劃功能,並允許在焦點更改爲另一個框時進行輸入驗證。一個不斷變化的bgcolor會指示一個無效的輸入。

任何好點子?

回答

2

而不是使用TextBox作爲時間輸入,使用DateTimePicker,只需將Format屬性更改爲Time

處理DateTimePickerValidating事件,如果它無效只設置e.Cancel = False,那麼它們不能保存更改,除非它是有效的。或者,如果您希望他們能夠離開DateTimePicker並更改顏色,則只需處理ValueChanged事件。

關於您的代碼示例,我沒有真正看過它的邏輯,而是將代碼移到一個單獨的函數中,然後使用開始和結束時間調用該函數作爲參數,它可以返回工作時間,因爲它是返回值。

我不確定你的用戶界面是什麼樣的,但是如果你重複多次開始時間和結束時間輸入控制,也可能需要考慮創建自己的用戶控件,它可以包含每個開始和結束時間控件,然後您可以在該用戶控件中進行驗證,因此您不必擁有大量事件處理程序等。