我有按钮阵列,每个边框颜色都表示某种状态(蓝色=活动按钮;绿色=正常按钮,红色=“火”)。每个按钮代表硬件上的一个传感器。
按钮位于某个UpdatePanel中,其中Timer内置于 1500ms 刷新。当计时器超时并被称为Tick事件时,调用页面加载事件,其中我将颜色设置为按钮,因此触发的按钮设置为红色,正常的按钮设置为绿色,活动的按钮设置为蓝色。一切都很好,直到我点击一个调用点击事件的按钮,其中点击的按钮边框变为蓝色。我认为当现在调用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 :(得分:0)
得到了解决,为什么它仍然是蓝色是所有按钮得到
sensor_buttons[i].EnableViewState = true;
导致该服务器记住之前的按钮状态。