最近有一个客户要求Mapping的打标标是00-99中可选的方式。由于控件有点多,我不想手动去拖100个控件。所以想到了动态添加。
效果图
代码
/// <summary>/// 生成 CheckBox/// </summary>/// <param name="panel"></param>/// <param name="count"></param>private void GenerateCheckBox(Panel panel, int count){panel.Controls.Clear();int startIntervalX = 10;int startIntervalY = 10;int rowIndex = 0;int colIndex = 0;for (int i = 0; i < count; i++){//过滤不打标的if (!CommonDefine.MappingNotMarkStr.Contains(i.ToString("00"))){var chkObj = new CheckBox();chkObj.Text = i.ToString("00");chkObj.Tag = i.ToString("00");chkObj.Width = 40;chkObj.Height = 20;//判断是否已选择 打标的chkObj.Checked = CommonDefine.MappingMarkStr.Contains(chkObj.Text);chkObj.Click += ChkObj_Click;chkObj.Location = new Point(colIndex * chkObj.Width + startIntervalX,rowIndex * chkObj.Height + startIntervalY);panel.Controls.Add(chkObj);colIndex++;if (colIndex == 10){colIndex = 0;rowIndex++;}}}}private void ChkObj_Click(object sender, EventArgs e){var checkBox = (sender as CheckBox);if (checkBox.Checked){//将用户的选择记录并保存到配置中CommonDefine.MappingMarkStr += checkBox.Text + ",";}}
调用
GenerateCheckBox(this.panelMappingMark, 100);