C#动态循环生成控件(附源码)
C#动态循环生成控件(附源码)
- 前言
- 一、为什么要动态带出代码?
- 1.示例图片
- 2.原因
- 二、动态带出步骤
- 1.定义
- 1.定义相关控件
- 2.进行循环(部分代码展现)
- 3.编写数据库语句
- 三、源码展现
- 1、源码
- 2、代码效果展示
前言
该文章总结了如何在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);}}