[原创]C#之探索发现:在WinForm上写的一个模拟分页小程序
今天闲来无事,由于手痒,特上来编写一个有趣的东西。每天都在用C#这门语言,我这人比较爱钻牛角尖。今天我钻到了在Winform上写一个模拟分页的小程序。
分页程序,大家都不陌生。下面我将要实现的是,在一个Form控件上,通过一个RichTextBox进行显示‘未使用分页’之前的原始数据;用另一个RichTextBox显示‘正在分页’时的数据。下面我传上几张图,大家就明白了。(今天写的这篇日志,打算与朋友们分享,本人才书学浅,万一有不对之处,还望批评指证!)
图片:一 {显示的是界面,并且进行了分页显示,定位在第一页上}
图片:二 {我定位到了第2页,数据显式正常,能衔接上}
图片:三 {我直接定位到了尾页,总记录数1万条,每页显示11条,最后一页只剩1条,这个是没错的。}
上面先给大家展示了整个界面及显示效果。下面说一下我实现的方式:
这一万条数据,我是将其放在了List<string>集合类里面了。然后进行各种处理。仅做了最简单的分页跳转,用四个按钮“首页,上一页,下一页,尾页”进行跳转控制。
整个小程序说明了什么呢?我相信有一些朋友,在使用分页代码时,有可能直接就Copy现成的放在自己的工程中,对分页它到底是怎么处理的心里或许不清楚。下面我将贴上处理分页的代码,其实很简单。主要也是想让您,不仅知其然,还要尽可能的知其所以然。程序中我加入了尽可能全面的注释。
或许会有朋友说我在‘多此一举’,没关系,只是想让跟我一样喜欢探索的朋友,尽可能的发现一些想知道的东西罢了。
代码如下:[首先贴上来的就是核心处理程序,WinForm各控件的属性代码文件我就不贴了]
分页处理程序代码
1 /* 2 * 由 左安坤 创建。 3 * 用户: Administrator 4 * 日期: 2011-9-14 5 * 时间: 9:29 6 * 7 * 8 * 9 1*1 0 1 10 2*1 (2-1) 2 11 3*1 (3-1) 3 12 13 ------------------ 14 10 15 16 1*10 (10-1) 10 17 2*10 (20-10) 20 18 3*10 (30-20) 30 19 ------------------- 20 公式: 分页原理 21 22 分页数 23 24 第一页 1 分页数 25 26 第二页 (当前页*分页数-分页数) 当前页*分页数 27 */ 28 29 using System; 30 using System.Collections.Generic; 31 using System.Text; 32 using System.Drawing; 33 using System.Windows.Forms; 34 35 namespace MoniPage 36 { 37 /// <summary> 38 /// Description of MainForm. 39 /// </summary> 40 public partial class MainForm : Form 41 { 42 [STAThread] 43 public static void Main(string[] args) 44 { 45 Application.EnableVisualStyles(); 46 Application.SetCompatibleTextRenderingDefault(false); 47 Application.Run(new MainForm()); 48 } 49 50 public MainForm() 51 { 52 // 53 // The InitializeComponent() call is required for Windows Forms designer support. 54 // 55 InitializeComponent(); 56 57 // 58 // TODO: Add constructor code after the InitializeComponent() call. 59 // 60 } 61 62 private List<string> Y_data = new List<string>(); //我自己声明的一个泛型集合,分页就是围绕它展开的----[模拟分页] 63 64 void Button1Click(object sender, EventArgs e) //自动填充数据 65 { 66 67 if(Y_data.Count<=0){ 68 for(int i=1;i<10001;i++){ 69 string str = String.Format("这是第{0}条数据。\r\n",i); 70 Y_data.Add(str); 71 } 72 Show_Data(); 73 } 74 } 75 76 void Button2Click(object sender, EventArgs e) //清除数据 77 { 78 if(Y_data.Count>=0){ 79 Y_data.Clear(); 80 Show_Data(); 81 richTextBox2.Text = ""; 82 } 83 } 84 85 void Show_Data(){ //将数据显示在左侧框里 86 87 StringBuilder sb = new StringBuilder(); 88 for(int i=0;i<Y_data.Count;i++){ 89 sb.Append(String.Format("[{0,4:0000}] {1}",i+1,Y_data[i])); 90 if(i != (Y_data.Count-1)){ 91 sb.Append(new string('-',20)); 92 sb.Append("\r\n"); 93 } 94 } 95 richTextBox1.Text = sb.ToString(); 96 } 97 private int P_ageNum; //每页显示记录数 98 private int T_pages; //共多少页 99 private int Current_page = 1; //当前页,默认定位于第一页100 101 void Button7Click(object sender, EventArgs e) //进行分页初始化102 {103 if((textBox1.Text == null)||(textBox1.Text == String.Empty)){104 MessageBox.Show("请设置每页显示多少条信息!","设置分页条目:");105 return;106 }107 if(!Int32.TryParse(textBox1.Text,out this.P_ageNum)){108 MessageBox.Show("请输入合法的数字!","数字输入框:");109 return;110 }111 if(this.P_ageNum<=0){112 MessageBox.Show("您输入的是0或负数,无需分页操作!","非法设置:");113 return;114 }115 if(this.P_ageNum > Y_data.Count){ 116 MessageBox.Show("您输入的页数大于了总记录数!","非法设置:");117 this.P_ageNum = 0;118 return;119 }120 this.T_pages = Y_data.Count/this.P_ageNum;121 if(Y_data.Count%this.P_ageNum != 0){122 this.T_pages++;123 }124 label1.Text = String.Format("共:({0})页",this.T_pages);125 Current_page = 1;126 SplitPages();127 }128 129 void Button3Click(object sender, EventArgs e) //进行分页处理的程序130 {131 Button bn = sender as Button; //获取传递进来的Button属性132 if(this.T_pages > 1){ //总页数只有大于1才有意义133 switch(bn.Name){134 case "FirstPage": //首页135 if(this.Current_page>1){ //只有当前页大于1时,才会返回首页,否则本身就在首页呢136 this.Current_page = 1; //直接将当前页定位到1137 SplitPages();138 }139 break;140 case "PreviousPage"://上一页141 if(this.Current_page>1){ //只有当前页大于1时,上一页才有可能存在,否则本身就在首页呢142 this.Current_page = this.Current_page-1; //往前翻一页143 SplitPages();144 }145 break;146 case "NextPage": //下一页147 if(this.Current_page+1 <= this.T_pages){ //只有当前页+1,不超出总页数时,才有意义148 this.Current_page = this.Current_page+1; //往后翻一页149 SplitPages();150 }151 break;152 case "LastPage": //尾页153 if(this.Current_page<this.T_pages){ //唯有当前页小于总页数时,才有意义154 this.Current_page = this.T_pages; //直接将当前页定位到尾页155 SplitPages();156 }157 break;158 default:159 break;160 }161 }162 }163 164 void SplitPages(){ //分页结果处理165 groupBox2.Text = String.Format("分页显示:当前第{0}页,共{1}条记录",this.Current_page,this.Y_data.Count);166 StringBuilder sx = new StringBuilder(); //用来拼接查询出来的记录167 //当前页 this.Current_page168 //每页显示的条数 this.P_ageNum169 /*170 * 公式: 分页原理171 172 *分页数173 174 第一页 1 分页数175 176 第二页 (当前页*分页数-分页数) 前页*分页数177 */178 int StartPage=0; //起始页179 int EndPage = 0;180 if(this.Current_page == 1){ //如果是第一页,则起始规则与其他页不同181 StartPage = 0; //不管是数组,还是集合起始索引都是从0开始182 EndPage = this.P_ageNum; //每页显示的页数183 }184 if(this.Current_page > 1){185 StartPage = (this.Current_page*this.P_ageNum)-this.P_ageNum; //计算起始页186 EndPage = this.Current_page*this.P_ageNum; //计算结束页187 188 if(EndPage>Y_data.Count){ //若索引边界超出了总记录数,明显不符合常理189 EndPage = Y_data.Count;190 }191 }192 for(int i=StartPage;i<EndPage;i++){193 sx.Append(String.Format("[{0,4:0000}] {1}",i+1,Y_data[i]));194 if(i != (EndPage-1)){195 sx.Append(new string('-',20));196 sx.Append("\n");197 }198 }199 richTextBox2.Text = sx.ToString();200 }201 }202 }
希望此文能帮助到需要的朋友,当处理小数据量时,或许就可以自己编个分页控件耍耍。
本人能力确实有限,写不出太伟大、太高明的程序。欢迎各朋友给予批评指证,也欢迎与我探讨C#方面的技术。
转载于:https://www.cnblogs.com/zuozuo/archive/2011/09/14/2176318.html
[原创]C#之探索发现:在WinForm上写的一个模拟分页小程序相关推荐
- windows模拟微信小程序_【原创】PC微信小程序包解密工具C#版无需root或模拟器
本帖最后由 daimaguo 于 2020-12-25 10:18 编辑 提示:鉴于有网友回复不知道干什么用的,因此有必要重新修改一次,写上完整的使用说明,说白了就是获取线上小程序源码的辅助工具,电脑 ...
- php小程序上传视频到七牛,小程序上传视频到七牛云的实践
❝ 好久没有更新推文了,这段时间也是在做一个小项目,一开始想的是人脸识别并上传视频到七牛云的,但是后来想想好像不用这个功能,但是我实现后才知道.所以就写一下上传的功能吧. ❞ 前言 大家都知道七牛云就 ...
- 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA
古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA (abcde不能重复!) #include <stdio.h> #include < ...
- 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx
PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...
- 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 查官方文档 解决方法 在 PowerShell中运行以下内容, 然后重启服务器 # Enab ...
- 【汇编程序】编写一个在显示器上显示的一个笑脸字符的程序
程序需求:编写一个在显示器上显示的一个笑脸字符的程序 要使用dos系统功能号 显示单个字符 使用2号功能 ;顺序结构程序结构设计 ;顺序结构程序也称为简单程序,这种程序按指令排列的先后顺序逐条执行 ...
- 录音、上传、播放音频微信小程序实践
文章目录 录音.上传.播放音频微信小程序实践 实践分析 依赖接口 录音 上传 播放 Page 事件 参考 录音.上传.播放音频微信小程序实践 最近上线了一款智能外呼机器人产品,需要开发一款录音.上传. ...
- 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA
/** 古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!"华生:&quo ...
- 古堡算式(福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA)
/*** * 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!"华生:" ...
- 古堡算式_经典的全排列问题(福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也)
题目描述 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!" 华生:&quo ...
最新文章
- SharePoint 2013 配置开发环境,需安装VS2012插件
- 网页缩放zoom用法
- [云炬创业基础笔记]第六章商业模式测试24
- 公众号点击图片变成另一张_微信公众号点击出现图片是怎么实现的?
- 求离散数据的突变点_Nat Gen | 染色质三维构象决定突变分布
- ARC077E - guruguru(差分)
- 处理JUnit中异常的另一种方法:catch-exception
- Java基础篇:finalize( )方法的使用
- Linux的syscall源码,Linux内核跟踪之syscall tracer
- 彻底删除mysql server 2005_sql2005卸载工具(sql server 2005卸载工具)
- ionic3 m3u8在线播放工具,在线播放
- 2012百公里毅行——长沙,湘潭,株洲
- QFP、PQFP、LQFP、TQFP封装形式及PCB详解(转载)
- 提高Java开发效率:5个常用的Visual Studio代码扩展工具
- go mgo包 简单封装 mongodb 数据库驱动
- 保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...
- 建造者(Builder)模式
- 升级鸿蒙要双清,在鸿蒙即将来临之际,先全方位进行一波升级,准备好了咩?...
- ShardingShpere分库分表5-ShardingSphere分布式事务详解
- Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路