最近有一个客户要求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);