2013-03-08 121 views
2

我有这样的代码中的方法的IM调用一个计时器每秒的方法:如何添加到列表框另一个项目?

data = new List<string>(); 
data.Add("Gpu Temeprature --- " + sensor.Value.ToString()); 
listBox1.DataSource = null; 
listBox1.DataSource = data; 
listBox1.Invalidate(); 

及其更新在列表框每秒首先作为项目的值。 现在我想在第二行增加一个新项目,因此它们都将被更新,每一秒,以便在计时器事件IM调用另一个方法至极有这样的代码里面:

// data = new List<string>(); 
data.Add("Cpu Temeprature --- " + sensor.Value.ToString()); 
listBox1.DataSource = null; 
listBox1.DataSource = data; 
listBox1.Invalidate(); 

如果我将使用数据=新的List();在第二种方法中,它将把这两个项目放在listBox中的相同位置。 如果我不使用这个数据= new List();那么第二个会一直闪烁,每一秒都会闪烁,而且看起来不太好。

这是计时器事件:

private void timer2_Tick(object sender, EventArgs e) 
{ 
    if (tempCpuValue >= (float?)nud1.Value || tempGpuValue >= (float?)nud1.Value) 
    { 
     soundPlay = true; 
     blinking_label(); 
     NudgeMe(); 
    } 
    else 
    { 
     soundPlay = false; 
     stop_alarm = true; 

    } 
    cpuView(); 
    gpuView(); 
} 

cpuView()和gpuView()是两个方法IM调用在定时器至极更新所述列表框。

,我有另外两个列表框事件:

private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) 
{ 
    e.ItemHeight = 25; 
}  


private void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    if (e.Index == -1) 
    { 
    } 
    else 
    { 
     ColorText.ColorListBox(data, e); 
    } 
} 

ColorText是在一个新的类,其中IM克尔铃ListBox中的项目。

+0

问题是如何添加第二个项目/更新listBox与另一个sensor.Value值。第一个是调节CPU温度,现在我想在第二个/第二个项目中更新GPU温度。 – user2065612 2013-03-08 06:56:43

回答

2

如果你想继续做这种方式,你可以做到以下几点:

尝试将数据初始化,数据源,并且这些功能块之外失效如下:

private void timer2_Tick(object sender, EventArgs e) 
     { 
      if (tempCpuValue >= (float?)nud1.Value || tempGpuValue >= (float?)nud1.Value) 
      { 
       soundPlay = true; 
       blinking_label(); 
       NudgeMe(); 
      } 
      else 
      { 
       soundPlay = false; 
       stop_alarm = true; 

      } 
      data = new List<string>(); 
      cpuView(); 
      gpuView(); 
      listBox1.DataSource = data; 
      listBox1.Invalidate(); 
     } 

并从功能中删除它们,所以你不要再做两次。


这可以使用BindingList更有效地完成。将数据更改为: BindingList Data = new BindingList();

然后,你永远不需要创建一个新的列表。将所需的两个值添加到此绑定列表中,然后设置listbox.DataSource =绑定列表。然后在你的GPU/CPU功能中,你只需要更新列表IE的索引:

data [0] =“Cpu Temeprature ---”+ sensor.Value.ToString());

和bindinglist应该处理更新列表框。

+0

Snukus正在工作,但现在listBox中的项目每秒闪烁。 – user2065612 2013-03-08 07:22:03

+0

每秒闪烁是什么意思?每当计时器滴答传感器告诉它改变时,盒子中的物品应该改变。它是否以其他方式闪烁? – Snukus 2013-03-08 07:51:01

+0

每当它在定时器中更新时,它都会闪烁。也许因为它正在再次绘制物品或更新的内容。 – user2065612 2013-03-08 11:50:45

相关问题