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");
        }
相关推荐
天天代码码天天26 分钟前
C# OpenCvSharp 部署3D人脸重建3DDFA-V3
人工智能·神经网络·计算机视觉·c#·dnn·3d人脸重建
WangMing_X1 小时前
C# 根据name查找并返回winform菜单栏(MenuStrip)、工具栏(ToolStrip)中的子控件来修改属性
开发语言·c#
浩浩kids2 小时前
Hadoop•用Web UI查看Hadoop状态&词频统计
大数据·hadoop·ui
格林威2 小时前
工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率
网络·人工智能·数码相机·opencv·计算机视觉·c#
※※冰馨※※3 小时前
matlab中的griddata函数
开发语言·windows·matlab
八月五3 小时前
redis安装教程(windows)
数据库·windows·redis
m0_748254664 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
ahardstone5 小时前
使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】
windows·ffmpeg·batch
m0_748247806 小时前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互