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