winfrom动态生成控件

一、需求描述

要完成一个winform程序,里面涉及到动态生成控件,初始化时:

点击添加阶梯价后:(点击一下,动态添加一行)

二、思路和代码实现

首先是动态添加控件(需要什么控件,都可以动态添加,思路都一样),这里写了一个专门动态创建控件的函数btn_create_Click,当点击上图的“添加阶梯价”按钮的时候就执行该函数。函数代码如下:

#region 动态创建价格梯度
        private void btn_create_Click(object sender, EventArgs e)
        {
            try
            {
                TextBox tb = new TextBox();
                TextBox tb1 = new TextBox();
                Label lb = new Label();
                Label lb1 = new Label();
                lb1.Text = "价格为:";
                lb.Text = "当数量为:";
                //设置控件属性和名称,其中全局变量“j”(初始值为0)是为了给每一个动态产生的控件命名,方便以后处理每个动态产生的控件;
                j++;
                tb.Name = "txt_number_" + j;
                tb1.Name = "txt_discount_" + j;
                tb.Width = 200;
                tb1.Width = 200;
                //设定位置,确定控件显示的位置。
                tb.Top = 30 + j * 30;
                tb.Left = 250;
                tb1.Top = 30 + j * 30;
                tb1.Left = 650;
                lb.Top = 35 + j * 30;
                lb.Left = 150;
                lb1.Top = 35 + j * 30;
                lb1.Left = 550;
                //添加控件 , ProductPrice是一个GroupBox组件,我动态产生的控件都放在了GroupBox中,布局的需要。             
                this.ProductPrice.Controls.Add(lb);
                this.ProductPrice.Controls.Add(tb);
                this.ProductPrice.Controls.Add(lb1);
                this.ProductPrice.Controls.Add(tb1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message); 
            }
        }
        #endregion

接下来就是将动态控件中的数据进行保存,思路很简单

//声明一个价格梯度的泛型,用来接收阶梯价的数据
Product product_entity = new Product();
#region
将动态控件中相应的数据赋值给对应的对象字段 int control_num = 0; Control ctl_1=new Control(), ctl_2 = new Control() ;//控件对象 List<Entity.VAERP.ProductPrice> prices = new List<Entity.VAERP.ProductPrice>();//声明阶梯价的类实体,用来接收数据 int a = 0;//记录数量控件状态 int b = 0;//记录价格控件状态 /// [扩展属性] 产品价值 foreach (Control ctl in this.ProductPrice.Controls) {
          //判断符合条件且对应的动态控件
if (ctl.GetType().ToString() == "System.Windows.Forms.TextBox" &&ctl.Name!= "tbox_baseprice") { control_num++; if (control_num % 2 != 0) { ctl_1 = ctl; a = 1; } if (control_num % 2 == 0) { ctl_2 = ctl; b = 1; }
            //当a,b都为1的时候,说明获取到了对应的数量和价格,把对应的这一组数量和价格添加到类实体
if (a==1&&b==1) { prices.Add(new Entity.VAERP.ProductPrice { ProductID = "", ID = 0, Quantity = int.Parse(ctl_1.Text), Percent = decimal.Parse(ctl_2.Text) / product_entity.BasePrice });
              //设置为0,寻找下一组对应的数量价格。 a
= 0; b = 0; } } }
        //获取到了所有组数据,赋值给产品实体 并插入 product_entity.Prices
= prices.ToArray();
       insert(product_entity);

#endregion
原文地址:https://www.cnblogs.com/qtiger/p/5629078.html