C#动态加载控件

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值