2012-12-27 51 views
0

所以我目前正在一個程序中,我需要有一個計時器附加到列表框中的每個項目,我有這個工作,但我不能選擇任何項目,有沒有辦法可以選擇項目,但也有一個計時器顯示列表框中的每個項目?在列表框中的計時器c#

更新:

添加項目到一個新的列表框這裏的時候

是代碼,我有:

private void btnSchedule_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string name = lsbScheduled.SelectedItem.ToString();// saves the selected item to a string 
       string newItem = (moveItem(name));//calls the method and passes the variable to it 
       tmrCheckedIn.Enabled = true; 
       tmrCheckedIn.Start(); 
       newItem += "  " + "00:00:00"; 
       lsbScheduled.Items.Remove(name);// removes the item from the list 
       lsbCheckedIn.Items.Add(newItem); //adds the item to the list   
      } 
      catch (NullReferenceException) 
      { 
      } 
     } 
here is my code for the tick event: 

private void tmrCheckedIn_Tick(object sender, EventArgs e) 
    { 
     int count = lsbCheckedIn.Items.Count; 

     for (int i = 0; i < count; i++) 
     { 
      string item = lsbCheckedIn.Items[i].ToString(); 
      string[] line = item.Split(); 
      string time = line[8]; 

      Time oldTime = new Time(); 
      oldTime.StartTime = time; 

      lsbCheckedIn.Items.Remove(item); 
      string newTime = string.Format(line[0] + " " + line[1] + " " +line[2] + "  " + "{0:c}", oldTime.EndTime); 
      lsbCheckedIn.Items.Add(newTime); 


      oldTime = null; 

     } 

    } 

and here is my class that I use to increase the timer: 
public class Time 
    { 
     private int seconds, minutes, hours; 
     string startTime, endTime; 

     public Time() 
     { 
      seconds = 00; 
      minutes = 00; 
      hours = 00; 
      startTime = " "; 
      endTime = ""; 
     } 

     public string StartTime 
     { 
      set { startTime = value; 
      CalcNewTime(); 
      } 
      get { return startTime; } 
     } 

     public string EndTime 
     { 
      set { endTime = value; } 
      get { return endTime; } 
     } 

     public int Hours 
     { 
      set { hours = value; } 
      get { return hours; } 
     } 

     public int Minutes 
     { 
      set { minutes = value; } 
      get { return minutes; } 
     } 

     public int Second 
     { 
      set { seconds = value; } 
      get { return seconds; } 
     } 

     private void CalcNewTime() 
     { 
      const int LIMIT = 6, CONVERT = 10; 

      string[] divisions = startTime.Split(':'); 
      hours = Convert.ToInt32(divisions[0]); 
      minutes = Convert.ToInt32(divisions[1]); 
      seconds = Convert.ToInt32(divisions[2]); 

      int hoursTens = hours/CONVERT; 
      int hoursOnes = hours % CONVERT; 
      int minutesTens = minutes/CONVERT; 
      int minuteOnes = minutes % CONVERT; 

      seconds += 1; 
      int secondTens = seconds/CONVERT; 
      int secondOnes = seconds % CONVERT; 



      if (secondTens >= LIMIT) 
      { 
       secondTens = 0; 
       secondOnes = 0; 
       minutes += 1; 

       minutesTens = Minutes/CONVERT; 
       minuteOnes = minutes % CONVERT; 
       if (minutesTens >= LIMIT) 
       { 
        minutesTens = 0; 
        minuteOnes = 0; 
        hours += 1; 

        hoursTens = hours/CONVERT; 
        hoursOnes = Hours % CONVERT; 
       } 
      } 
      endTime = Convert.ToString(hoursTens + hoursOnes + ":" + minutesTens + minuteOnes + ":" + secondTens + secondOnes); 
     } 

    } 

在使用Visual Studio 2010 IM使用定時器編程Windows窗體應用程序,您可以從工具箱中選擇。我需要能夠選擇列表框中的項目,但現在我可以,因爲我不斷地添加和刪除列表框中的項目。我希望列表框中顯示的時間上升,但我也需要它,以便我可以選擇列表框中的項目。

+0

請顯示您正在嘗試做的示例代碼和屏幕截圖。 – malkassem

+0

你正在編程WPF嗎?你指的是什麼? –

+0

計時器像一個計時器**類**或定時器像一個標籤顯示一個數字倒數?你的問題目前毫無意義。 –

回答

1

你的問題是,你是從列表框中刪除項目,然後添加新的。這就是爲什麼項目不會保持選定狀態。相反,只需更換物品。

lsbCheckedIn.Items[i] = newTime; 
+0

是的,這似乎是原因。另一種選擇是否需要刪除並添加新內容是因爲任何原因,請檢查是否選擇了要刪除的內容,如果是,請在添加新內容後選擇新內容。 – Chris