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");
        }
相关推荐
能摆一天是一天3 小时前
JAVA stream().flatMap()
java·windows
JosieBook3 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
John_ToDebug5 小时前
定制 ResourceBundle 的实现与 DuiLib 思想在 Chromium 架构下的应用解析
c++·chrome·ui
萌新小码农‍7 小时前
Java分页 Element—UI
java·开发语言·ui
该用户已不存在10 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
枫叶落雨22210 小时前
注解参数校验
windows
通达的K10 小时前
Java实战项目演示代码及流的使用
java·开发语言·windows
胡耀超11 小时前
3.Python高级数据结构与文本处理
服务器·数据结构·人工智能·windows·python·大模型
离越词11 小时前
C++day8作业
开发语言·c++·windows