1、思路

(1)获取一个集合(数据)

(2)遍历集合,设置统一的控件样式、设置控件坐标

(3)关联事件

2、实现

项目开发中,当需求发生改变时,UI界面需要简单更改,这时代码就需要去修改,这样子做比较麻烦,因此可以通过获取数据库数的方式,增加、删除、更改,更改这部分简单的UI需求。

2.1 数据库连接配置

本文采用SQLite轻量型数据库,配置数据库。

实体类Student

    public class Student{public int ID { get; set; }public string Name { get; set; }public int Number { get; set; }public string ClassName { get; set; }}

获取数据库的数据保存到集合中

    public class StudentService{public static List<Student> CheckSQLite(){SQLiteHelper SQLiteHelper = new SQLiteHelper();        //string sql = $"select * from {SQL_Table} LIKE '{time}%'";string sql = "select * from Student WHERE Name !='NULL';";SQLiteDataReader reader = SQLiteHelper.GetReader(sql);List<Student> studentList = new List<Student>();while (reader.Read()){studentList.Add(new Student{                                   ID= Convert.ToInt32(reader["ID"]),Name= reader["Name"].ToString(),Number = Convert.ToInt32(reader["Number"]),ClassName= reader["ClassName"].ToString()});}reader.Close();return studentList;}}

下面以按钮Button为示例,设置统一演示,控件在UI上显示的,可以更具属性的一个标致位或集合的索引判断.

坐标X=初始坐标+(index%行显示个数-1)*适应宽度--取余数

坐标Y=初始坐标+(index/行显示个数)*适应宽度--取整除数

        private void LoadUI(List<Student> students){foreach (var item in students){Button button = new Button();button.Name = "B"+item.Number;button.Text = item.Name;button.Tag = $"{item.ID},{item.Name},{item.Number},{item.ClassName}";int x = 88; int y = 30;if (Convert.ToInt32(item.ID) % 7 != 0){x = 105 * ((Convert.ToInt32(item.ID) % 7) - 1) + 88;}y = 64 * (Convert.ToInt32(item.ID) / 7) + 30;button.Location = new System.Drawing.Point(x, y);button.Size = new System.Drawing.Size(100, 45);button.TextAlign = ContentAlignment.MiddleCenter;this.Controls.Add(button);button.Click += new EventHandler(button_Click);}}

把控件添加到 Controls控件集合中,并关联一个统一个事件,集中管理,通过控件的属性,完成逻辑上的控制

this.Controls.Add(button);
button.Click += new EventHandler(button_Click)
       private void button_Click(object sender, EventArgs e){Button button = (Button)sender;MessageBox.Show(button.Text+"来自于"+button.Tag);}

程序运行效果

本文相关Demo下载链接:https://download.csdn.net/download/qq_39157152/25970463

C#学习笔记-Winform根据数据自动生成控件相关推荐

  1. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  2. 【学习笔记】大数据技术之Scala(下)

    [学习笔记]大数据技术之Scala(上) 大数据技术之Scala 第 6 章 面向对象 6.1 Scala 包 6.1.1 包的命名 6.1.2 包说明(包语句) 6.1.3 包对象 6.1.4 导包 ...

  3. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  4. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  5. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  6. HALCON 21.11:深度学习笔记---Data(数据)(3)

    HALCON 21.11:深度学习笔记---Data(数据)(3) HALCON 21.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...

  7. CAS学习笔记五:SpringBoot自动/手动配置方式集成CAS单点登出

    本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出. 本文基于<CAS学习笔记三:SpringBoot自动/手动配置方式集成C ...

  8. CCC3.0学习笔记_证书数据

    CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...

  9. oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...

    天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...

最新文章

  1. 浅析从小米造车背后探索小米集团的企业网络推广策略会有怎样的灿烂
  2. SQL Server 查询数据库中所有的表名及行数
  3. 【转载】:单例设计模式
  4. 【分享】如何创建自己的Visual Studio 2005/2008配色
  5. Linux下安装Win10ARM,更多安卓旗舰机将可以安装运行Win10 ARM
  6. 我的世界有宠物系统服务器,我的世界:如果Minecraft加入战斗宠物系统,推荐5大最强生物!...
  7. 85 缓存, 验证码 序列化
  8. csm和uefi_uefi是什么意思?uefi和BIOS的区别是什么?
  9. 【技术科普】HLS视频流内m3u8文件和TS切片是什么关系?
  10. 无法将类中的构造器应用到给定类型
  11. python读取xlsx文件找不到_在python中打开并读取excel .xlsx文件
  12. 如何跨入AI的大门 Python人工智能方向怎么样
  13. 坦克大战第一节——画出自己的坦克(新手篇)
  14. 支付宝支付二维码显示在商家网站页面,不跳转到支付宝?
  15. 英菲克无线鼠标pm6的配对方法
  16. 服务启动时,报Command line is too long异常
  17. 用什么软件测试mate9的闪存_荣耀v9怎么看闪存类型 荣耀v9怎么测试闪存
  18. 对数字签名的攻击概述
  19. RationalDMIS 7.1 程序示例
  20. Unity车轮碰撞器起步刹车太慢

热门文章

  1. 四叉树C++实现(增删改查,找邻居)
  2. erlang 编译安装
  3. 小陷胸汤加味方与乳汁淤积
  4. linux设置定时任务(crontab)
  5. 夜深了 是时候爬个小黄图了
  6. RK3568平台开发系列讲解(GNSS篇)GNSS介绍
  7. RK3399平台开发系列讲解(内存篇)15.29、物理内存管理
  8. 多维标度法(MDS,Multidimensional Scaling)及普氏分析(Procrustes Analysis)在人体姿态关节点上的简单示例(python)
  9. C语言程序设计入门16——初识字符输入输出3:简单字符加密
  10. [转载]用J2ME开发企业级无线应用