没想到这么不起眼的东西杀了我不少脑细胞……

在控制台中测试没发现啥问题,代码风格什么的就先不管它了

public static class PageNumExt
{public delegate void ToDo(long i);public delegate void PadToDo();public static void GeneratePageNum(this object o,long curr, ToDo cfixToDo, PadToDo padToDo, long fixLen = 2, long padding = 1){o.GeneratePageNum(curr, cfixToDo, cfixToDo, padToDo, fixLen, padding);}public static void GeneratePageNum(this object o,long curr, ToDo currTodo, ToDo cfixToDo, PadToDo padToDo, long fixLen = 2, long padding = 1){GeneratePageNum(o,curr, currTodo,1, long.MaxValue,cfixToDo, i => { },fixLen, cfixToDo,padding, padToDo,fixLen, curr,cfixToDo, i => { });}public static void GeneratePageNum(this object o,long curr, ToDo currToDo,long begin, long end,ToDo beginToDo, ToDo endToDo,long cfix, ToDo cfixToDo,long padding, PadToDo padToDo,long sfixBegin, long pfixEnd,ToDo sfbToDo, ToDo pfeToDo){long i = begin;if (begin < curr){beginToDo(begin);i++;var g1 = i + sfixBegin;var g3 = curr - cfix;var g2 = g3 - padding;if (g1 > g3)g1 = g3;for (; i < g1; i++)sfbToDo(i);if (i < g2){padToDo();i = g2 + 1;}elsefor (; i < g3; i++)cfixToDo(i);}for (; i < curr; i++)cfixToDo(i);currToDo(curr);i = curr + 1;var g = i + cfix;if (g > end)g = end;for (; i < g; i++)cfixToDo(i);if (end > curr){var g1 = end - pfixEnd;var g2 = g1 - padding;if (g < g2)padToDo();elsefor (; i < g1; i++)cfixToDo(i);if (i < g1)i = g1;for (; i < end; i++)pfeToDo(i);endToDo(end);}}
}

参数解说:

curr - 当前页码

currToDO - 怎样输出当前页码

begin - 页码从多少开始

end - 页码到多少结束

beginToDo - 怎样显示起始页码

endToDo - 怎样显示结束页码

cfix - 当前页的前后页码输出多少个

cfixToDo - 当前页前后页码怎样输出

padding - 所有没有被涵盖进其它参数的页码,如果出现次数超过这个参数的值,则完全省略掉

padToDo - 被省略掉的页码应该怎样表现

sfixBegin - 从起始页码开始,延伸显示多少个页码

pfixEnd - 到结束页码位置,延伸显示多少个靠近结束位置的页码

sfbToDo - 起始页码附近的页码应该怎么样表现

pfeToDo -结束页码附近的页码应该怎么样表现

测试用的控制台程序代码:

for (var j = 1; j < 20; j++)
{args.GeneratePageNum(j, i =>{Console.Write('[');Console.Write(i);Console.Write(']');Console.Write(' ');},2, 18,i =>{Console.Write('<');Console.Write(i);Console.Write(' ');},i =>{Console.Write(i);Console.Write('>');},2, i =>{Console.Write('#');Console.Write(i);Console.Write(' ');},1, () => Console.Write(".. "),2, 2, i =>{Console.Write('[');Console.Write(i);Console.Write(' ');}, i =>{Console.Write(i);Console.Write(']');Console.Write(' ');});Console.WriteLine();
}for (var j = 1; j < 10; j++)
{args.GeneratePageNum(j, i =>{Console.Write('[');Console.Write(i);Console.Write(']');Console.Write(' ');}, i =>{Console.Write(i);Console.Write(' ');}, () =>{Console.Write(".. ");}, 2, 1);Console.WriteLine();
}

转载于:https://www.cnblogs.com/NanaLich/archive/2010/07/08/page-number-generate-helper.html

一个显示页码用的helper。。。相关推荐

  1. lodop打印不显示页码_Excel|13个Excel打印技巧汇总,打印技巧大全

    打印技巧是工作必备,无需理由! 很多时候大家得不到想要的打印效果,偶尔打印一两张表格,会出现各种状况:标题行不见了?打印范围错了?页眉页脚不对? 打印一个内容,总得弄出一堆草稿纸纸张来之不易,且打且珍 ...

  2. WORD中如何设置前几页不显示页码,同时更改总页数

    word文档在同一文件中插入页码时,总是从第一页到末页顺序编码,但我这一文件从第1-4页为"提纲"或者"前言",不需编页码,从第5页开始才是正文,那么怎样才能使 ...

  3. 怎样在Word2007里设置首页不显示页码,第二页页码从“2”开始显示?

    引自:http://zhidao.baidu.com/question/91035930.html 在写毕业论文,没有封面.因此第一页的页码应该是"1".但要求是第一页不显示页码, ...

  4. Word首页不显示页码的2种方法

    方法1:在"页面设置"中选择奇偶页不同,在页眉页脚中选择"设置页码格式",设置起始页码为0,然后在第一页删除0页脚即可. (我认为如果仅仅是为了首页不显示页码的 ...

  5. Mac版Word设置从第K页开始显示页码

    tags: Word Tips 写在前面 最近有同学问我怎么在word文档中从第四页开始设置页码, 也就是首页以及第二页第三页的说明页都不编页码, 从第四页开始页码为1, 然后往后编号这种. 一开始我 ...

  6. 解决 echarts柱状图x轴数据隔一个显示

    echarts柱状图x轴数据隔一个显示 在显示一个柱状图的时候,x轴的数据是隔一个显示的,但是hover的时候却能显示出当前轴x轴的名称,如下图: 那就只能说明这个轴的名称太长了,所以导致它默认就隔一 ...

  7. win7系统怎么样在计算机里找桌面,如何在64位win7电脑中创建一个“显示桌面”的快捷方式...

    在之前的XP系统中,咱们桌面下方的任务栏窗口中是有一个"显示桌面"的图标的,不管咱们在电脑中开启多少网页,开启多少程序,只需要点击一下这个"显示桌面"的图标,咱 ...

  8. html图片按页码显示,html - 在打印html文档时显示页码 - 堆栈内存溢出

    几个月前,当我使用以下代码在浏览器(firefox)中打印HTML文档时,能够显示页码: body { width: 300px; counter-reset: page; } #header { b ...

  9. phppage类封装分页功能_php显示页码分页类的封装

    本文实例为大家分享了php封装显示页码的分页类,供大家参考,具体内容如下 一.代码 conn.php class Mysql{ public function __construct(){ $this ...

最新文章

  1. LINUX UMASK详解
  2. 机器人如何在不断变化的世界中“找到”自己?
  3. 【腾讯三面】你能现场写一下LRU算法吗?
  4. R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)、在编辑器中输出需要的数据生成最终的dataframe
  5. Hotel California
  6. mysql数据压缩加密_MySQL 加密/压缩函数
  7. 用友互联网战略的变与不变
  8. oracle11g memory_target,oracle11g MEMORY_MAX_TARGET设置成0 问题处理
  9. Redis内存分析工具
  10. 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
  11. 重庆高考计算机分数线,重庆高考历年分数线
  12. MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处
  13. 『遥かに仰ぎ、丽しの』游戏初回版特典原声集 GAME SP OST(下载、中日双语歌词)...
  14. python抓取贴吧_python抓取百度贴吧-校花吧,网页图片
  15. Java团队+.NET团队==足球队+篮球队;我们能否同时培养好2个优秀的精英团队?
  16. CA服务器的简单搭建
  17. deepin系统安装成功了之后重启电脑没有deepin启动选项的简单解决办法
  18. 安装photoshop2022mac遇到安装失败错误代码182解决方法
  19. 【SpringCloud】-- SpringCloud简介
  20. sha加密算法介绍以及java实现sha加密算法

热门文章

  1. React开发(231):常见手机号邮箱的正则
  2. 前端学习(2915):数据绑定
  3. [html] 前端需要注意哪些SEO?
  4. 1社会心理学---感知情境
  5. 前端学习(2546):debugger
  6. 前端学习(2181):vue-router导航守卫的补充
  7. “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)
  8. “约见”面试官系列之常见面试题之第四十八篇之各个浏览器内核(建议收藏)
  9. 前端学习(2087):v-on得修饰符使用案例
  10. 第一百三十七期:一个简单的小案例带你理解MySQL中的事务