• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C#动态循环生成控件附源码

武飞扬头像
浩『』皓
帮助1


前言

该文章总结了如何在C#动态带出控件并进行编写,从而避免制作人员拖出一个个控件,解决了控件过多,而导致代码冗余过长的问题,本文联合了sql server数据库进行编写,使得文件管理更加有序


一、为什么要动态带出代码?

1.示例图片

示例图片:学新通

2.原因

如上图,我有15个商品下单部分,每个部分有5个相关的控件,包括(textbox、label、button、GroupBox、pictureBox),整个小界面就有75个控件。
如果我一个个拖出相关控件出来并进行编写,这会导致出现将近3千行垃圾代码,况且我一个采购界面不止一个小界面(有16个小界面),所以我不得不采取动态带出控件,来进行程序的编写。


二、动态带出步骤

1.定义

1.定义相关控件

我们要定义相关控件,想要找到他们之间的父子级练习,比如我的groupbox要放在一个panel里面,我的其他控件要放在groupbox里面

代码如下(示例):


            Panel[] panel1s = new Panel[30];
            System.Windows.Forms.GroupBox[] GroupBoxs = new System.Windows.Forms.GroupBox[30];
            Button[] bnt = new Button[30];
            PictureBox[] pictureBoxes = new PictureBox[30];
2.进行循环(部分代码展现)

其次我们要开始通过循环语句,带出相关控件,通过定义各个控件的相关属性,使得控件可以被带出并进行展示

代码如下(示例):

 for (int i = 0; i < 16; i  )
            {
                GroupBoxs[i] = new System.Windows.Forms.GroupBox();
                GroupBoxs[i].Name = "panel_"   i.ToString();
                GroupBoxs[i].Parent = panel2;
                GroupBoxs[i].Location = new Point((i % 4) * 300, (i / 4) * 200);
                GroupBoxs[i].Width = 300;
                GroupBoxs[i].Height = 150;

                var textBox = new System.Windows.Forms.TextBox();
                textBox.Name = "DishTextBox_"   i.ToString();//textbox属性名字
                textBox.Text = "白菜" //textbox展示的字段
                textBox.Parent = GroupBoxs[i];
                textBox.Location = new Point(10, 10);
                textBox.Size = new Size(100, 30);
                textBox.ReadOnly = true;

                var textBox2 = new System.Windows.Forms.TextBox();
                textBox2.Name = "textBox_"   i.ToString();
                textBox2.Parent = GroupBoxs[i];
                textBox2.Location = new Point(170, 60);
                textBox2.Size = new Size(50, 30);

                var textBox3 = new System.Windows.Forms.TextBox();
                textBox3.Name = "FoodNo_"   i.ToString();          
                textBox3.Parent = GroupBoxs[i];
                textBox3.Location = new Point(170, 60);
                textBox3.Size = new Size(50, 30);
                textBox3.Visible = false;

                var label = new System.Windows.Forms.Label();
                label.Name = "lbl_"   i.ToString();
                label.Text = "采购数量(斤)";
                label.Parent = GroupBoxs[i];
                label.Location = new Point(155, 40);
                label.Size = new Size(100, 30);
             
                bnt[i] = new Button();
                bnt[i].Name = "bntton_"   i.ToString();
                bnt[i].Text = "添加入单";
                bnt[i].Parent = GroupBoxs[i];
                bnt[i].Location = new Point(155, 100);
                bnt[i].Size = new Size(80, 20);                
            }
学新通
3.编写数据库语句

代码如下(示例):

var dt = DBcoonnet.Query(string.Format("select NameOfFood,PictureAddress,FoodNo FROM [CanteenManagement].[dbo].[BasicTableOfDishes] where TypeOfFood = '{0}' ", nodeName)).Tables[0];

三、源码展现

1、源码
        public void order(string nodeName)
        {

            Panel[] panel1s = new Panel[30];
            System.Windows.Forms.GroupBox[] GroupBoxs = new System.Windows.Forms.GroupBox[30];
            Button[] bnt = new Button[30];
            PictureBox[] pictureBoxes = new PictureBox[30];

            var dt = DBcoonnet.Query(string.Format("select NameOfFood,PictureAddress,FoodNo FROM [CanteenManagement].[dbo].[BasicTableOfDishes] where TypeOfFood = '{0}' ", nodeName)).Tables[0];//此处调用了我的相关数据库,读者可以对相关sql语句进行编写
            for (int i = 0; i < dt.Rows.Count; i  )
            {
                GroupBoxs[i] = new System.Windows.Forms.GroupBox();
                GroupBoxs[i].Name = "panel_"   i.ToString();
                GroupBoxs[i].Parent = panel2;
                GroupBoxs[i].Location = new Point((i % 4) * 300, (i / 4) * 200);
                GroupBoxs[i].Width = 300;
                GroupBoxs[i].Height = 150;


                var textBox = new System.Windows.Forms.TextBox();
                textBox.Name = "DishTextBox_"   i.ToString();
                textBox.Text = dt.Rows[i]["NameOfFood"].ToString();
                textBox.Parent = GroupBoxs[i];
                textBox.Location = new Point(10, 10);
                textBox.Size = new Size(100, 30);
                textBox.ReadOnly = true;


                var textBox2 = new System.Windows.Forms.TextBox();
                textBox2.Name = "textBox_"   i.ToString();
                textBox2.Parent = GroupBoxs[i];
                textBox2.Location = new Point(170, 60);
                textBox2.Size = new Size(50, 30);

                var textBox3 = new System.Windows.Forms.TextBox();
                textBox3.Name = "FoodNo_"   i.ToString();
                textBox3.Text = dt.Rows[i]["FoodNo"].ToString();
                textBox3.Parent = GroupBoxs[i];
                textBox3.Location = new Point(170, 60);
                textBox3.Size = new Size(50, 30);
                textBox3.Visible = false;


                var label = new System.Windows.Forms.Label();
                label.Name = "lbl_"   i.ToString();
                label.Text = "采购数量(斤)";
                label.Parent = GroupBoxs[i];
                label.Location = new Point(155, 40);
                label.Size = new Size(100, 30);


                var pictureBox = new PictureBox();
                pictureBox.Name = "pictureBoxes"   i.ToString();
                pictureBox.Text = "pictureBoxes"   i.ToString();
                pictureBox.Parent = GroupBoxs[i];
                pictureBox.Location = new Point(10, 30);
                pictureBox.Size = new Size(100, 100);
                pictureBox.Image = System.Drawing.Image.FromFile(dt.Rows[i]["PictureAddress"].ToString());
                pictureBox.BackgroundImageLayout = ImageLayout.Stretch;
                pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;


                bnt[i] = new Button();
                bnt[i].Name = "bntton_"   i.ToString();
                bnt[i].Text = "添加入单";
                bnt[i].Parent = GroupBoxs[i];
                bnt[i].Location = new Point(155, 100);
                bnt[i].Size = new Size(80, 20);
            }
        }
学新通
2、代码效果展示

学新通


这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghekib
系列文章
更多 icon
同类精品
更多 icon
继续加载