用C#对自动红绿灯进行编码
本文关键字:编码 红绿灯 | 更新日期: 2023-09-27 17:58:44
我正试图使用WinForms应用程序在Visual C#中编写一个红绿灯程序。基本上我想要的是三个面板,每个面板都有一种颜色:红色、黄色和绿色。当一个面板处于"打开"状态时,其他面板将为灰色。我希望"打开"的面板每15秒更换一次。
例如,1) 默认情况下,"红色"为"打开","黄色"answers"绿色"为灰色。2) 15秒后,"黄色"为"开","红色"answers"绿色"为灰色3) 15秒后,"绿色"为"开","红色"answers"黄色"为灰色4) 15秒后,"红色"为"开","黄色"answers"绿色"为灰色
我设法编写了一个版本,可以通过按下按钮使其改变颜色,然而,我不知道如何实现15秒计时器。
这是我当前的源代码:
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;
}
}
}
}
第一个按钮将舞台设置为"红色"、"灰色"、"灰度",点击第二个按钮后,舞台将变为"灰色"answers"黄色"、"灰"、"格雷"answers"绿色"、"红色"answers"灰色",依此类推
我希望每隔15秒自动进行更改。
从Toolax->Components拖动窗体上的Timer(列出的最后一项)。转到属性窗口并将Interval
属性设置为15000(每15秒引发一次tick事件),现在选择属性窗口上的Events并双击tick事件以生成正确的事件处理程序。请注意,计时器默认为Enable=false,这意味着您必须从代码中打开它。将此代码添加到您的应用程序中(不要忘记标记答案):
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;
}
}
}