Form中的Control是管理控件的东西,因此使用这个Control参数就可以管理控件,从而实现动态添加。
如图所示,点击按钮即可添加控件,在我的示例中,我是用了DevExpress中的panelControl控件下的Controls实现。
不多说,直接代码实现
定义变量
//常量
private static string zdmc = "zdmc";
private static string sxz = "sxz";
//记录行中
List<LabelControl> labelzdmc = new List<LabelControl>();
List<LabelControl> labelsxz = new List<LabelControl>();
List<TextEdit> textzdmc = new List<TextEdit>();
List<TextEdit> textsxz = new List<TextEdit>();
在Btn_Add按钮中增加
private void Btn_Add_Click(object sender, EventArgs e)
{
_ztLoger.WriteLog("新增一行");
//labelcontrol
LabelControlSet(zdmc);
LabelControlSet(sxz);
//textcontrol
TextEditSet(zdmc);
TextEditSet(sxz);
//调整Form整体界面
this.Size = new Size(this.Size.Width, this.Size.Height + 25);
//调整panelfieldandbtn界面
panelFieldAndBtn.Size = new Size(panelFieldAndBtn.Size.Width, panelFieldAndBtn.Size.Height + 25);
//放开delete按钮
if (Btn_Delete.Enabled == false)
{
Btn_Delete.Enabled = true;
Btn_Delete.Visible = true;
}
}
在btn_delete中增加
private void Btn_Delete_Click(object sender, EventArgs e)
{
_ztLoger.WriteLog("删减一行");
//删除labelzdmc
if (labelzdmc.Count > 2)
{
LabelControl lbzdmc = labelzdmc[labelzdmc.Count - 1];
panelField.Controls.Remove(lbzdmc);
labelzdmc.Remove(lbzdmc);
}
//删除labelsxz
if (labelsxz.Count > 2)
{
LabelControl lbsxz = labelsxz[labelsxz.Count - 1];
panelField.Controls.Remove(lbsxz);
labelsxz.Remove(lbsxz);
}
//删除textzdmc
if (textzdmc.Count > 2)
{
TextEdit tezdmc = textzdmc[textzdmc.Count - 1];
panelField.Controls.Remove(tezdmc);
textzdmc.Remove(tezdmc);
}
//删除textsxz
if (textsxz.Count > 2)
{
TextEdit tesxz = textsxz[textsxz.Count - 1];
panelField.Controls.Remove(tesxz);
textsxz.Remove(tesxz);
}
//调整边框大小
//调整Form整体界面
if (labelzdmc.Count > 2)
{
this.Size = new Size(this.Size.Width, this.Size.Height - 25);
//调整panelfieldandbtn界面
panelFieldAndBtn.Size = new Size(panelFieldAndBtn.Size.Width, panelFieldAndBtn.Size.Height - 25);
}
else
{
this.Size = new Size(this.Size.Width, this.Size.Height - 25);
//调整panelfieldandbtn界面
panelFieldAndBtn.Size = new Size(panelFieldAndBtn.Size.Width, panelFieldAndBtn.Size.Height - 25);
//关闭delete按钮
Btn_Delete.Visible = false;
Btn_Delete.Enabled = false;
}
}
事件实现函数
private void LabelControlSet(string tp)
{
try
{
LabelControl labelControl = new LabelControl();
LabelControl lb = null;
string name = "";
if (tp == zdmc)
{
lb = labelzdmc[labelzdmc.Count - 1];
name = "labelzdmc" + labelzdmc.Count.ToString();
//设置名称
labelControl.Text = "字段名称:";
labelControl.Name = name;
//设置大小
labelControl.Size = new Size(75, 18);
//设置位置
labelControl.Location = new Point(lb.Location.X, lb.Location.Y + 25);
panelField.Controls.Add(labelControl);
labelzdmc.Add(labelControl);
}
else if(tp == sxz)
{
lb = labelsxz[labelsxz.Count - 1];
name = "labelsxz" + labelzdmc.Count.ToString();
//设置名称
labelControl.Text = "属性值:";
labelControl.Name = name;
//设置大小
labelControl.Size = new Size(60, 18);
//设置位置
labelControl.Location = new Point(lb.Location.X, lb.Location.Y + 25);
panelField.Controls.Add(labelControl);
labelsxz.Add(labelControl);
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.ToString());
return;
}
}
private void TextEditSet(string tp)
{
TextEdit textEdit = new TextEdit();
TextEdit te = null;
string name = "";
if(tp == zdmc)
{
te = textzdmc[textzdmc.Count - 1];
name = "textzdmc" + textzdmc.Count.ToString();
//设置名称
textEdit.Name = name;
textEdit.Text = "";
//设置大小
textEdit.Size = new Size(136, 24);
//设置位置
textEdit.Location = new Point(te.Location.X, te.Location.Y + 25);
panelField.Controls.Add(textEdit);
textzdmc.Add(textEdit);
}
else if(tp == sxz)
{
te = textsxz[textsxz.Count - 1];
name = "textsxz" + textsxz.Count.ToString();
//设置名称
textEdit.Name = name;
textEdit.Text = "";
//设置大小
textEdit.Size = new Size(136, 24);
//设置位置
textEdit.Location = new Point(te.Location.X, te.Location.Y + 25);
panelField.Controls.Add(textEdit);
textsxz.Add(textEdit);
}
}