C#动态蛇形排列添加控件,并实现跑马灯的效果

本文档详细介绍了如何在Windows窗体应用中动态添加控件,特别是使用C#实现动态添加PictureBox控件并进行蛇形排列。同时,通过枚举和Timer控件展示了如何实现跑马灯效果,改变控件颜色,为用户界面增添动态视觉效果。
摘要由CSDN通过智能技术生成

目录

前言

当需要向窗体或者容器中添加具有一定排列规则并且数量比较多的控件时,就需要通过代码动态添加控件。


一、界面设计

窗体中需要添加Btton,GroupBox,numericUpDown,timer等控件,如图所示。

二、关键技术

1.动态添加控件

代码如下:

       PictureBox[,] resultPicBoxs = new PictureBox[100, 100];
        int colNum = 0;//显示的列数
        int rowNum = 0;//显示的行数
        private void btnAddPictureBox_Click(object sender, EventArgs e)
        {
            grbResultShow.Controls.Clear();//清除显示框的所有控件
            colNum = (int)nudColNum.Value;
            rowNum = (int)nudRowNum.Value;
            int offsetX = 10;//X方向的间距
            int offsetY = 20;//Y方向的间距
            int picBoxsLength = 0;
            if (colNum != 0 && rowNum != 0)
            {
                int picBoxsWidth = (grbResultShow.Size.Width) / (colNum+1);
                int picBoxsHight = (grbResultShow.Size.Height) / (rowNum+1);

                if (picBoxsWidth < picBoxsHight)
                {
                    picBoxsLength = picBoxsWidth;//把短边设置为正方形的长
                }
                else
                {
                    picBoxsLength = picBoxsHight;
                }
                offsetX = (grbResultShow.Size.Width - colNum * picBoxsLength) / 2;
                offsetY = (grbResultShow.Size.Height - rowNum * picBoxsLength) / 2;

                for (int row = 0; row < nudRowNum.Value; row++)
                {
                    for (int col = 0; col < colNum; col++)
                    {
                        resultPicBoxs[row, col] = new PictureBox();
                        resultPicBoxs[row, col].BackColor = System.Drawing.Color.Gray;
                        if (row % 2 == 0)//蛇形排布
                        {
                            resultPicBoxs[row, col].Location = new System.Drawing.Point(offsetX + col * picBoxsLength, offsetY + row * picBoxsLength);
                        }
                        else
                        {
                            resultPicBoxs[row, col].Location = new System.Drawing.Point(offsetX + (colNum - col - 1) * picBoxsLength, offsetY + row * picBoxsLength);
                        }
                        resultPicBoxs[row, col].Name = "resultPicBoxs[" + (row).ToString() + "," + (col).ToString() + "]";
                        resultPicBoxs[row, col].Size = new System.Drawing.Size(picBoxsLength - 2, picBoxsLength - 2);
                        grbResultShow.Controls.Add(resultPicBoxs[row, col]);                    

                    }
                }
                rowNumNow = 0;
                colNumNow = 0;
                btnStart.Enabled = true;
            }
        }

2.改变控件颜色实现跑马灯效果

先创建一个下一个是什么颜色的枚举

代码如下:

   enum NextColor
        {
            red,
            yellow,
            green,
        }
        NextColor nextColor;

通过timer控件来循环改变控件的背景颜色

代码如下:

 bool flagRun = false;//是否在运行的标志位
        /// <summary>
        /// 开始按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            flagRun = true;
            btnStop.Enabled = true;
            btnStart.Enabled = false;
            btnAddPictureBox.Enabled = false;
        }
        /// <summary>
        /// 停止按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStop_Click(object sender, EventArgs e)
        {
            flagRun = false;
            btnStop.Enabled = false;
            btnStart.Enabled = true;
            btnAddPictureBox.Enabled = true;
        }

   
        int rowNumNow = 0;
        int colNumNow = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            if(flagRun)
            {
                switch(nextColor)
                {
                    case NextColor.red:
                        if (resultPicBoxs[rowNumNow, colNumNow].BackColor != Color.Red)
                        {
                            resultPicBoxs[rowNumNow, colNumNow].BackColor = Color.Red;
                            colNumNow++;
                        }
                        nextColor = NextColor.yellow;
                        break;
                    case NextColor.yellow:
                        if (resultPicBoxs[rowNumNow, colNumNow].BackColor != Color.Yellow)
                        {
                            resultPicBoxs[rowNumNow, colNumNow].BackColor = Color.Yellow;
                            colNumNow++;
                        }
                        nextColor = NextColor.green;
                        break;
                    case NextColor.green:
                        if (resultPicBoxs[rowNumNow, colNumNow].BackColor != Color.Green)
                        {
                            resultPicBoxs[rowNumNow, colNumNow].BackColor = Color.Green;
                            colNumNow++;
                        }
                        nextColor = NextColor.red;
                        break;
                }
                if(colNumNow>=colNum)
                {
                    rowNumNow++;
                    colNumNow = 0;
                }
                if(rowNumNow>=rowNum)
                {
                    rowNumNow = 0;
                    colNumNow = 0;

                }
            }
        }

三、效果展示

总结

以上实例实现了动态生成控件,并通过改变控件背景颜色实现跑马灯的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值