C# winodw TableLayoutPanel 料盒生产状态UI自动生成

料盒生产状态UI自动生成,效果如下

以前公司项目的这些都是手动拖控件做的。每个设备的料盒数量不一样,层数不一样时都要发好几个小时去改相关细节和代码。上次改了一次。这个又来了。上次就有想法做成根据参数自动生成。但项目时间有限有没有去深入思路和深度。这次发了几个小时加班完成了。

代码:

复制代码
/// <summary>
        /// 表头的全选 复选框
        /// </summary>
        List<CheckBox> checkBoxAllList = new List<CheckBox>();

        /// <summary>
        /// 芯片生产状态标签
        /// </summary>
        Label[,] boxMarkContent = new Label[8, 25];//[料盒数量,料盒层数]

        /// <summary>
        /// 芯片选中列表
        /// [料盒索引,层索引]
        /// </summary>
        CheckBox[,] boxChipCheckArray = new CheckBox[3, 25];//[料盒数量,料盒层数]

/// <summary>
        /// 初始化 料盒UI
        /// </summary>
        private void initBoxUI()
        {
            //料盒索引
            int nBoxIndex = 0;
            //芯片层 索引
            int nChipIndex = 0;

            //AxisTestForm.BOX_COUNT 料盒数量
            this.tableLayoutPanel2.Controls.Clear();
            this.tableLayoutPanel2.ColumnStyles.Clear();//清除默认样式 这个很重要
            this.tableLayoutPanel2.RowStyles.Clear();//清除默认样式 这个很重要

            this.tableLayoutPanel2.Size = new Size(344, 651);
            this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 27F));

            this.tableLayoutPanel2.ColumnCount = 1 + AxisTestForm.BOX_COUNT * 2;
            this.tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 35F));
            //列宽
            double columnWidth = 100.0 / AxisTestForm.BOX_COUNT;
            //列索引
            int columnIndex = 0;
            //添加列
            for (int i = 0; i < AxisTestForm.BOX_COUNT; i++)
            {
                columnIndex++;
                this.tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)columnWidth));
                this.tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30F));

                Label labelTitle = new Label();
                labelTitle.Anchor = AnchorStyles.Bottom;
                labelTitle.Margin = new Padding(4, 0, 4, 0);
                labelTitle.Name = "lblBoxTitle" + i;
                //labelTitle.TabIndex = 1;
                labelTitle.Text = "料盒" + (i + 1);
                labelTitle.TextAlign = ContentAlignment.MiddleCenter;

                this.tableLayoutPanel2.Controls.Add(labelTitle, columnIndex, 0);

                columnIndex++;

                CheckBox checkBoxAll = new CheckBox();
                checkBoxAll.Anchor = AnchorStyles.Left;
                checkBoxAll.AutoSize = true;
                checkBoxAll.Checked = true;
                checkBoxAll.CheckState = CheckState.Checked;
                checkBoxAll.Name = "checkBoxAll" + i;
                checkBoxAll.Tag = i;
                checkBoxAll.Size = new Size(24, 21);
                //checkBoxAll.TabIndex = 3;
                checkBoxAll.Text = " ";
                checkBoxAll.UseVisualStyleBackColor = true;
                checkBoxAll.CheckedChanged += new System.EventHandler(this.checkBoxAll_CheckedChanged);

                this.tableLayoutPanel2.Controls.Add(checkBoxAll, columnIndex, 0);
                checkBoxAllList.Add(checkBoxAll);
            }
            //行索引
            int rowIndex = 1;
            //行高
            double rowHeight = 100.0 / AxisTestForm.BOX_CHIPSCOUNT;
            //添加行
            for (int layerIndex = AxisTestForm.BOX_CHIPSCOUNT; layerIndex > 0; layerIndex--)
            {
                columnIndex = 0;
                this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, (float)rowHeight));
                if (layerIndex % 5 == 0)
                {
                    Label labelItemNo = new Label();
                    labelItemNo.AutoSize = true;
                    labelItemNo.BackColor = SystemColors.Control;
                    labelItemNo.Dock = DockStyle.Fill;
                    labelItemNo.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(134)));
                    labelItemNo.Margin = new Padding(4, 1, 4, 1);
                    labelItemNo.Name = "label_"+ layerIndex;
                    labelItemNo.Size = new Size(27, 18);
                    //labelItemNo.TabIndex = 4;
                    labelItemNo.Text = layerIndex.ToString();
                    labelItemNo.TextAlign = ContentAlignment.MiddleCenter;
                    this.tableLayoutPanel2.Controls.Add(labelItemNo, 0, rowIndex);
                }
                nChipIndex = layerIndex - 1;
                columnIndex++;
                //根据料盒数量生成对应列
                for (int i = 0; i < AxisTestForm.BOX_COUNT; i++)
                {
                    Label labelItem = new Label();
                    labelItem.AutoSize = true;
                    labelItem.BackColor = SystemColors.ActiveCaptionText;
                    labelItem.Dock = DockStyle.Fill;
                    labelItem.Margin = new Padding(4, 1, 4, 1);
                    labelItem.Name = "labelItem_" + i + "_" + nChipIndex;
                    //labelItem.TabIndex = 2;
                    labelItem.TextAlign = ContentAlignment.MiddleCenter;
                    this.tableLayoutPanel2.Controls.Add(labelItem, columnIndex, rowIndex);
                    nBoxIndex = i;
                    //芯片生产状态标签对象
                    boxMarkContent[nBoxIndex, nChipIndex] = labelItem;

                    columnIndex++;

                    CheckBox checkBoxItem = new CheckBox();
                    checkBoxItem.Anchor = AnchorStyles.Left;
                    checkBoxItem.AutoSize = true;
                    checkBoxItem.Checked = true;
                    checkBoxItem.CheckState = CheckState.Checked;
                    checkBoxItem.Name = "checkBox" + i + "_" + nChipIndex;
                    checkBoxItem.Size = new Size(24, 14);
                    //checkBoxItem.TabIndex = 3;
                    checkBoxItem.Text = " ";
                    checkBoxItem.UseVisualStyleBackColor = true;
                    checkBoxItem.Enabled = false;
                    this.tableLayoutPanel2.Controls.Add(checkBoxItem, columnIndex, rowIndex);
                    //芯片选中列表
                    boxChipCheckArray[nBoxIndex, nChipIndex] = checkBoxItem;

                    columnIndex++;
                }
                rowIndex++;
            }
        }

调用:

复制代码
/// <summary>
        /// 晶圆盒
        /// </summary>
        public WaferAutoForm()
        {
            InitializeComponent();

            initBoxUI();

            SetUIUserName("OP");
        }
相关推荐
合作小小程序员小小店5 小时前
桌面开发,在线%信息管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#
課代表5 小时前
Windows 文本搜索命令 findstr
windows·正则表达式·命令行·文本·匹配·搜索·findstr
吴声子夜歌6 小时前
Windows——系统配置与管理
windows
曹牧6 小时前
C#中的StartsWith
java·服务器·c#
时光追逐者6 小时前
分享5款.NET开源免费的Redis客户端组件库
数据库·redis·开源·c#·.net·.net core
p***92486 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
小邓   ༽6 小时前
C语言课件(非常详细)
java·c语言·开发语言·python·eclipse·c#·c语言课件
白日做梦Q6 小时前
Linux/Windows系统下:traceroute 与 tracert 路由追踪命令全解析
linux·运维·windows
睡前要喝豆奶粉6 小时前
EF Core动态sql
数据库·sql·c#·.netcore
食品一少年6 小时前
【Day1-3】(Windows版)Open Harmony PC 命令行适配指南环境准备篇(2)
windows