今天闲来无事,由于手痒,特上来编写一个有趣的东西。每天都在用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上写的一个模拟分页小程序相关推荐

  1. windows模拟微信小程序_【原创】PC微信小程序包解密工具C#版无需root或模拟器

    本帖最后由 daimaguo 于 2020-12-25 10:18 编辑 提示:鉴于有网友回复不知道干什么用的,因此有必要重新修改一次,写上完整的使用说明,说白了就是获取线上小程序源码的辅助工具,电脑 ...

  2. php小程序上传视频到七牛,小程序上传视频到七牛云的实践

    ❝ 好久没有更新推文了,这段时间也是在做一个小项目,一开始想的是人脸识别并上传视频到七牛云的,但是后来想想好像不用这个功能,但是我实现后才知道.所以就写一下上传的功能吧. ❞ 前言 大家都知道七牛云就 ...

  3. 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA

    古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA (abcde不能重复!) #include <stdio.h> #include < ...

  4. 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx

    PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...

  5. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...

    今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 查官方文档 解决方法 在 PowerShell中运行以下内容, 然后重启服务器 # Enab ...

  6. 【汇编程序】编写一个在显示器上显示的一个笑脸字符的程序

     程序需求:编写一个在显示器上显示的一个笑脸字符的程序 要使用dos系统功能号 显示单个字符 使用2号功能  ;顺序结构程序结构设计 ;顺序结构程序也称为简单程序,这种程序按指令排列的先后顺序逐条执行 ...

  7. 录音、上传、播放音频微信小程序实践

    文章目录 录音.上传.播放音频微信小程序实践 实践分析 依赖接口 录音 上传 播放 Page 事件 参考 录音.上传.播放音频微信小程序实践 最近上线了一款智能外呼机器人产品,需要开发一款录音.上传. ...

  8. 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA

    /** 古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!"华生:&quo ...

  9. 古堡算式(福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA)

    /*** * 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!"华生:" ...

  10. 古堡算式_经典的全排列问题(福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也)

    题目描述 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!" 华生:&quo ...

最新文章

  1. SharePoint 2013 配置开发环境,需安装VS2012插件
  2. 网页缩放zoom用法
  3. [云炬创业基础笔记]第六章商业模式测试24
  4. 公众号点击图片变成另一张_微信公众号点击出现图片是怎么实现的?
  5. 求离散数据的突变点_Nat Gen | 染色质三维构象决定突变分布
  6. ARC077E - guruguru(差分)
  7. 处理JUnit中异常的另一种方法:catch-exception
  8. Java基础篇:finalize( )方法的使用
  9. Linux的syscall源码,Linux内核跟踪之syscall tracer
  10. 彻底删除mysql server 2005_sql2005卸载工具(sql server 2005卸载工具)
  11. ionic3 m3u8在线播放工具,在线播放
  12. 2012百公里毅行——长沙,湘潭,株洲
  13. QFP、PQFP、LQFP、TQFP封装形式及PCB详解(转载)
  14. 提高Java开发效率:5个常用的Visual Studio代码扩展工具
  15. go mgo包 简单封装 mongodb 数据库驱动
  16. 保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...
  17. 建造者(Builder)模式
  18. 升级鸿蒙要双清,在鸿蒙即将来临之际,先全方位进行一波升级,准备好了咩?...
  19. ShardingShpere分库分表5-ShardingSphere分布式事务详解
  20. Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路

热门文章

  1. Java基础-----基类Object源码分析
  2. [SDK]新浪微博请求授权显示错误页面的解决方法
  3. 用adb pull命令从android系统中读取文件失败的原因及解决办法
  4. Myeclipse字符集设置
  5. 7个示例科普CPU Cache(from 酷壳网)
  6. Alfresco安装与配置图解
  7. 关于Oracle RAC基本概念
  8. 版本控制工具——subversion
  9. 平面判断两点连线是否交叉
  10. [Android] View控件显示隐藏动画效果