0

ボタン配列があり、すべての境界線の色が何らかの状態を示しています (青 = アクティブなボタン、緑 = 通常のボタン、赤 = 「火」 )。各ボタンは、ハードウェア上の 1 つのセンサーを表します。

ボタンは、 1500 ミリ秒の更新で設定されたタイマーを内部に持ついくつかの UpdatePanel 内にあります。タイマーがタイムアウトして 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
     }
4

1 に答える 1

0

解決しました。青のままなのは、すべてのボタンが取得されたためです。

sensor_buttons[i].EnableViewState = true;

これにより、サーバーはボタンの以前の状態を記憶しました。

于 2012-11-28T12:23:59.097 に答える