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

文章介绍了如何在C#中动态创建控件,以解决大量控件导致的代码冗余问题。作者通过实例展示了动态生成GroupBox、TextBox等控件的过程,并结合SQLServer数据库,使界面管理更加有序。动态生成的方法显著减少了手动创建和管理众多控件的工作量。
摘要由CSDN通过智能技术生成


前言

该文章总结了如何在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、代码效果展示

请添加图片描述


  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
C#中,循环语句用于重复执行一段代码块,可以用来创建件。以下是一些常用的循环语句: 1. for循环:for循环是一种常用的循环语句,可以指定循环的起始条件、循环条件和循环迭代方式。可以使用for循环来创建多个件。例如: ```csharp for (int i = 0; i < 5; i++) { Button button = new Button(); button.Text = "Button " + i; // 添加按钮到窗体或其他容器 this.Controls.Add(button); } ``` 上述代码将创建5个按钮,并将它们添加到窗体或其他容器中。 2. while循环:while循环循环开始之前先判断循环条件,只有当条件为真时才执行循环体。可以使用while循环来创建件。例如: ```csharp int i = 0; while (i < 5) { TextBox textBox = new TextBox(); textBox.Text = "TextBox " + i; // 添加文本框到窗体或其他容器 this.Controls.Add(textBox); i++; } ``` 上述代码将创建5个文本框,并将它们添加到窗体或其他容器中。 3. do-while循环:do-while循环先执行循环体,然后再判断循环条件,只有当条件为真时才继续执行循环。可以使用do-while循环来创建件。例如: ```csharp int i = 0; do { Label label = new Label(); label.Text = "Label " + i; // 添加标签到窗体或其他容器 this.Controls.Add(label); i++; } while (i < 5); ``` 上述代码将创建5个标签,并将它们添加到窗体或其他容器中。 总结起来,C#中的循环语句可以用来重复执行创建件的代码块,可以根据具体需求选择合适的循环语句来创建件。 #### 引用[.reference_title] - *1* *2* *3* [C#中的循环](https://blog.csdn.net/m0_74257628/article/details/127480721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃饭团的饭桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值