假如有100个label排成了一个矩形,现在想只用一个timer使这100label从第一个开始顺序的变成红色,当下一个变成红色是,前一个又变回原来的颜色。如:第一个先变成红色,然后是第二个变成红色同时第一个又变成原来的颜色,就这样一直到最后。有哪个高手可以回答呀,万分感激

解决方案 »

  1.   

    循环查找窗体的label控件。找到一个变色然后让他把上一个颜色再变回来。不知道这种思路可以吗。。
      

  2.   

    生成的时候把你的100个Label放的List中,Timer变色的时候改变下当前索引什么的就OK了
      

  3.   

    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 Applications
    {
        public partial class Form1 : Form
        {
            Control.ControlCollection ctrls;
            public Form1()
            {
                InitializeComponent();
                ctrls = this.Controls;
            }        int count = 0;
            private void timer1_Tick(object sender, EventArgs e)
            {
                for (int i = 0; i < ctrls.Count; i++)
                {
                    ctrls[i].BackColor = Color.White;
                }
                    
                ctrls[count].BackColor = Color.Red;
                count++;
                if (count >= ctrls.Count)
                {
                    count = 0;
                }
            }        private void Form1_Load(object sender, EventArgs e)
            {        }
        }
    }
      

  4.   

    // i为全局变量
    // LabelList为100个label形成的list
    LabelList[i].BackColor = Color.White;
    i = (i+1)%100;
    LabelList[i].BackColor = Color.Red;  
      

  5.   

    5楼效率太低,没必要每次重新对所有100个label进行颜色的变化
      

  6.   

    我自己还是写出来了
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace 跑马灯2
    {
        public partial class Form1 : Form
        {
           // Control.ControlCollection ctrls;
            public Form1()
            {
                InitializeComponent();
              //  ctrls = gB.Controls; 
            }        int i = 1;
            private void btnStart_Click(object sender, EventArgs e)
            {
                timer1.Interval = 100;
                timer1.Enabled = true;
            }        private void timer1_Tick_1(object sender, EventArgs e)
            {
               // i++;
                if (i > 100)
                {
                    i = 1;
                }
                Label lb = (Label)gB.Controls.Find("label" + i, true)[0];
                lb.BackColor = Color.Red;
                if (i == 1)
                {
                    label100.BackColor = System.Drawing.SystemColors.Control;
                }
                else
                {
                    Label bb = (Label)gB.Controls.Find("label" + (i - 1), true)[0];
                    bb.BackColor = System.Drawing.SystemColors.Control;
                }
                i++;
            }
        }
    }