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");
}