C#——创建一个窗体程序, 利用事件驱动模型来解决温度预警问题。

1.设计界面

控件timer1的Interval属性值为:1000

2.编写代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 温度预警
{
    public partial class Form1 : Form
    {
        Random r = new Random(); //产生一个随机数生成器
        TemperatureWarning tw = new TemperatureWarning();
        public Form1()
        {
            InitializeComponent();
            //第四步:订阅事件
            tw.OnWarning += new TemperatureWarning.TemperatureHandler(tw_OnWarning);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;  //开始每1s改变一次温度
        }
        //第三步:声明事件产生时调用的方法
        private void tw_OnWarning(object sender, TemperatureEventArgs e)
        { 
            if(e.Temperature<35)
            {
                label2.Text = "正常";
                label3.BackColor = Color.Blue;
            }
            else if(e.Temperature <37)
            {
                label2.Text = "高温黄色预警!";
                label3.BackColor = Color.Yellow;
            }
            else if (e.Temperature < 40)
            {
                label2.Text = "高温橙色预警!";
                label3.BackColor = Color.Orange;
            }
            else
            {
                label2.Text = "高温红色预警";
                label3.BackColor = Color.Red;
            }
        }

        //每隔1s激发一次该方法,用来模拟温度值的改变
        private void timer1_Tick_1(object sender, EventArgs e)
        {
            int nowTemp; //原来的温度值
            if (textBox1.Text == "")
            {
                nowTemp = 35;
            }
            else
            {
                nowTemp = Convert.ToInt32(textBox1.Text);
            }
            int change = r.Next(-2, 3); //产生一个在-2——2之间的随机数
            textBox1.Text = (change + nowTemp).ToString();//新的温度值
            //第五步:触发事件
            tw.Monitor(change + nowTemp);
        }
    }

    //第一步:定义事件相关信息类
    class TemperatureEventArgs : EventArgs
    {
        int temperature;
        public TemperatureEventArgs(int temperature)  //声明构造函数
        {
            this.temperature = temperature;
        }
        public int Temperature  //定义只读属性
        {
            get { return temperature; }
        }
    }
    //第二步:定义事件
    class TemperatureWarning
    { 
        //2.1声明温度预警的委托类型
        public delegate void TemperatureHandler(object sender, TemperatureEventArgs e);
        //2.2声明温度预警事件
        public event TemperatureHandler OnWarning;
        //2.3开始监控气温,同时发布事件
        public void Monitor(int tp)
        {
            TemperatureEventArgs e = new TemperatureEventArgs(tp);
            if(OnWarning!=null)
            {
                OnWarning(this,e);
            }
        }
    }
}

3.运行结果

猜你喜欢

转载自blog.csdn.net/lmm0513/article/details/89108411
今日推荐