2012-11-28 23 views
0

我有按鈕陣列和每個邊框顏色信號的某種狀態(藍色=活動按鈕;綠色=普通按鈕,紅色=「火」)。每個按鈕代表硬件上的一個傳感器。按鈕邊框仍然是藍色時點擊和定時刷新ASP .NET

按鈕在裏面有一些UpdatePanel裏面有Timer設置在1500ms刷新。當定時器超時並且被稱爲Tick事件時,頁面加載事件被調用,其中我爲按鈕設置顏色,因此將着火的按鈕設置爲紅色,正常的按鈕爲綠色,並且處於活動狀態的按鈕爲藍色。一切都很好,直到我點擊某個按鈕時,點擊按鈕邊界變爲藍色的點擊事件。我認爲當現在調用Tick事件時,這個被點擊的按鈕現在應該鬆開藍色的邊框顏色,並且它被設置爲默認的綠色。但它保持藍色,即使我將它設置爲火(所以在下一次嘀嗒聲事件後它應該是紅色的),它仍然是藍色的。有人可以幫助解決這個問題嗎?

protected void Page_Load(object sender, EventArgs e) 
    { 
     //Here is condition which checks if is exist Session['ActiveSensor'] 
     if (Session["ActiveSensor"] == null) 
     { 
      Session.Add("ActiveSensor", "A1"); 
      Session.Add("LastActiveSensorIndex", "0"); 
     } 
     //================================================================== 
     Sensors = new SensorNetwork(); 
     sensor_buttons = new Button[Sensors.SensorNet.Length]; 
     int i = 0; 
     foreach (Sensor sensor in Sensors.SensorNet) 
     { 
      sensor_buttons[i] = new Button(); 
      sensor_buttons[i].ID = Convert.ToString(i); 
      sensor_buttons[i].BackColor = sensor.Temperature.TemperatureColor; 
      sensor_buttons[i].Text = Math.Round(sensor.Temperature.CelsiusTemperature, 2).ToString() + "°C"; 
      sensor_buttons[i].Click += new EventHandler(sensor_Click); 
      sensor_buttons[i].BorderWidth=2; 

      if (sensor.Valid == false) 
      { 
       sensor_buttons[i].Enabled = false; 
      } 
      else { 
       sensor_buttons[i].Enabled = true; 
      } 
      if (sensor.Fire == true) 
      { 
       sensor_buttons[i].BorderColor = System.Drawing.Color.DarkRed; 
      } 
      else { 
       sensor_buttons[i].BorderColor = System.Drawing.Color.ForestGreen; 
      } 

      if (sensor.SensorID == Session["ActiveSensor"].ToString() && sensor.Fire==false) { 
       sensor_buttons[i].BorderColor = System.Drawing.Color.LightSkyBlue; 
       Session.Add("LastActiveSensorIndex", i.ToString()); 
      } 

      UpdatePanel2.ContentTemplateContainer.Controls.Add(sensor_buttons[i]); 
      i++; 
     } 
    } 



protected void sensor_Click(object sender, EventArgs e) 
    { 
     var ClickedButton =(Button)sender; 
     Sensor NewSensor=Sensors.SensorNet[Convert.ToInt32(ClickedButton.ID)]; 

     ClickedButton.BorderColor = System.Drawing.Color.LightSkyBlue; //This button stays blue even if the Tick is called 
    } 
+0

您確定按照您認爲的順序調用了「Page_Load」和「sensor_click」嗎? –

+0

如果我不點擊按鈕(它調用sensor_click),那麼一切都很好,直到我點擊它(我設置傳感器着火和按鈕被更改)。在那之後,服務器忽略邊界變化,並且總是返回藍色(即使我將傳感器設置爲火,但仍保持藍色)。所以我想這些事件是按正確順序調用的。 –

回答

0

得到它解決了,它之所以呈藍色是所有按鈕得到

sensor_buttons[i].EnableViewState = true; 

這將導致該服務器想起按鈕之前的狀態。