首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C#编写自动交通灯的代码

用C#编写自动交通灯的代码
EN

Stack Overflow用户
提问于 2014-04-17 05:17:03
回答 1查看 11.9K关注 0票数 0

我正在尝试使用WinForms应用程序在Visual C#中编写一个红绿灯程序。基本上我想要的是三个面板,每个一种颜色:红色,黄色和绿色。当其中一个面板“打开”时,其他面板将呈灰色。我想要打开的面板每15秒更换一次。

例如,1)默认情况下,“红色”为“开”,“黄色”和“绿色”为灰色。2) 15秒后,“黄色”是“开”,“红”和“绿”是灰色3) 15秒后,“绿”是“开”,“红”和“黄”是灰色4) 15秒后,“红”是“开”,“黄”和“绿”是灰色

我设法编写了一个版本,我可以让它通过按下按钮来改变颜色,然而,我不知道如何实现15秒计时器。

以下是我当前的源代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Traffic_Light_Form
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panel_Red.BackColor = Color.Red;
            panel_Yellow.BackColor = Color.Gray;
            panel_Green.BackColor = Color.Gray;

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if ((panel_Yellow.BackColor == Color.Gray) == (panel_Green.BackColor == Color.Gray))
            {
                panel_Red.BackColor = Color.Gray;
                panel_Yellow.BackColor = Color.Yellow;
            }

            else if (panel_Yellow.BackColor == Color.Yellow)
            {
                panel_Yellow.BackColor = Color.Gray;
                panel_Green.BackColor = Color.Green;
            }

            else
            {
                panel_Green.BackColor = Color.Gray;
                panel_Red.BackColor = Color.Red;
            }
        }
    }
}

第一个按钮将舞台设置为“红色”、“灰色”、“灰色”,单击第二个按钮后,舞台将变为“灰色”、“黄色”、“灰色”、“绿色”、“红色”、“灰色”,以此类推。

我希望更改每隔15秒自动发生一次。

EN

回答 1

Stack Overflow用户

发布于 2014-04-17 05:44:17

从Toolbax ->组件中将Timer (列出的最后一项)拖动到窗体上。转到属性窗口并将Interval属性设置为15000 (每15秒引发一次滴答事件),现在在属性窗口中选择事件并双击滴答事件以生成适当的事件处理程序。请注意,计时器在默认情况下是Enable = false,这意味着您必须从代码中启用它。将此代码添加到您的应用程序中(不要忘记标记答案):

代码语言:javascript
复制
public partial class Form1 : Form
{
    private List<Panel> _panels;
    private int _currentPanelIndex; 
    private List<Color> _colors;      

    public Form1()
    {
        InitializeComponent();
        _panels = new List<Panel> { panel_Red, panel_Yellow, panel_Green };
        _colors = new List<Color> {Color.Red,Color.Yellow,Color.Green};
        _currentPanelIndex = 0;

        timer1.Start();
    }

    private void UpdatePanels()
    {
        for (int index = 0; index < 3; index++)
        {
            if (index.Equals(_currentPanelIndex))
            {
                //current panel to be on
                _panels[index].BackColor = _colors[index];
            }
            else
            {
                //others are gray
                _panels[index].BackColor = Color.Gray;
            }
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //set current colors
        UpdatePanels();
        //move to next panel
        _currentPanelIndex++;
        //reset to start from first panel
        if (_currentPanelIndex.Equals(3))
        {
            _currentPanelIndex = 0;
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23120321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档