2012-12-27 19 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