2014-09-23 238 views
0

我在C#中有幾個DateTimePicker控件,我需要限制用戶只能從30分鐘的時間間隔(例如, 9:00 - > 9:30 - > 10:00 - > 10:30,依此類推。這可能嗎?限制時間DateTimePicker爲30分鐘間隔

+0

假設你的意思是WinForms,沒有內置的方法來做到這一點。你可能會考慮在普通的ComboBox中顯示時間,然後解析選定的值。 – 2014-09-23 02:58:46

+0

@GrantWinney你可以像我展示它一樣。 – mybirthname 2014-09-23 03:01:17

+0

請檢查我的實施。 – mybirthname 2014-09-23 03:18:44

回答

2
public Form1() 
    { 
     InitializeComponent(); 

     if (dt.Minute % 30 > 15) 
     { 
      initialValue = true; 
      dateTimePicker1.Value = dt.AddMinutes(dt.Minute % 30); 
     } 
     else 
     { 
      initialValue = true; 
      dateTimePicker1.Value = dt.AddMinutes(-(dt.Minute % 30)); 
     } 

     _prevDate = dateTimePicker1.Value; 

    } 


    private DateTime _prevDate; 
    private bool initialValue = false; 

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
    { 
     if(initialValue) 
     { 
      initialValue = false; 
      return; 
     } 

     DateTime dt = dateTimePicker1.Value; 
     TimeSpan diff = dt - _prevDate; 

     if (diff.Ticks < 0) 
      dateTimePicker1.Value = _prevDate.AddMinutes(-30); 
     else 
      dateTimePicker1.Value = _prevDate.AddMinutes(30); 

     _prevDate = dateTimePicker1.Value; 
    } 

這應該有效。您需要全局變量/ Property來存儲_prevDate。您在Form1()中或Form Load上設置_prevDate。

我們如何每次增加/刪除30分鐘。

On value更改您正在使用當前dataPicker值的事件,然後計算currentValue和prevValue之間的差異。如果值> 0添加,並且值< 0刪除。

如果您不知道如何更改DatePicker以顯示分鐘,則需要在設計器中添加此分鐘。 你需要這個代碼:

 this.dateTimePicker2.CustomFormat = "dd/MM/yyyy hh:mm"; 
     this.dateTimePicker2.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 
     this.dateTimePicker2.ShowUpDown = true; 

編輯: 我補充這將啓動DataPicker上00或30取決於如何接近30或00.你需要bool類型的另一全局變量這將給初值代碼dateTimePicker。看代碼。

+0

試過了。它確實在一個半小時內上下跳動。它從目前的分鐘開始,所以現在(對我來說)從11:03跳到11:33到12:03。 – 2014-09-23 03:03:28

+0

@GrantWinney可以從00或30開始,這不是問題。如果你問這 – mybirthname 2014-09-23 03:05:05

+0

@GrantWinney在這裏我添加的代碼從00或30開始。 – mybirthname 2014-09-23 03:19:11

相關問題