欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(十二)c#Winform自定义控件-分页控件

程序员文章站 2022-05-29 10:26:24
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 如果觉得写的还行,请点个 star 支持一下吧 欢迎前来交流探讨: 企鹅群568015492 目录 ......

前提

入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

开源地址:

如果觉得写的还行,请点个 star 支持一下吧

欢迎前来交流探讨: 企鹅群568015492 

目录

准备工作

当一个列表加载数据过多时,比如datagridview,如果数据过多,则可能超出内存,相应慢等问题,此时需要用到翻页控件。

设计思路,对翻页控件定义接口,基类实现,如果所列的翻页控件样式或功能无法满足你的需求的话,你只需要基类翻页控件基类或者实现接口即可。

定义接口是因为后面的一些列表控件内置了翻页控件,为了达到兼容扩展,所有使用了接口定义约束。

开始

首先需要一个分页事件用到的委托,偷懒,只写了一个

[serializable]
    [comvisible(true)]
    public delegate void pagecontroleventhandler(object currentsource);

 

我们先定义一个接口ipagecontrol

 1  public interface ipagecontrol
 2     {
 3         /// <summary>
 4         /// 数据源改变时发生
 5         /// </summary>
 6         event pagecontroleventhandler showsourcechanged;
 7         /// <summary>
 8         /// 数据源
 9         /// </summary>
10         list<object> datasource { get; set; }
11         /// <summary>
12         /// 显示数量
13         /// </summary>
14         int pagesize { get; set; }
15         /// <summary>
16         /// 开始下标
17         /// </summary>
18         int startindex { get; set; }
19         /// <summary>
20         /// 第一页
21         /// </summary>
22         void firstpage();
23         /// <summary>
24         /// 前一页
25         /// </summary>
26         void previouspage();
27         /// <summary>
28         /// 下一页
29         /// </summary>
30         void nextpage();
31         /// <summary>
32         /// 最后一页
33         /// </summary>
34         void endpage();
35         /// <summary>
36         /// 重新加载
37         /// </summary>
38         void reload();
39         /// <summary>
40         /// 获取当前页数据
41         /// </summary>
42         /// <returns></returns>
43         list<object> getcurrentsource();
44         /// <summary>
45         /// 总页数
46         /// </summary>
47         int pagecount { get; set; }
48         /// <summary>
49         /// 当前页
50         /// </summary>
51         int pageindex { get; set; }
52     }

然后定义一个分页基类控件,添加一个用户控件,命名ucpagercontrolbase,并实现接口ipagecontrol

看下属性

 1 /// <summary>
 2         /// 总页数
 3         /// </summary>
 4         public virtual int pagecount
 5         {
 6             get;
 7             set;
 8         }
 9         private int m_pageindex = 1;
10         /// <summary>
11         /// 当前页码
12         /// </summary>
13         public virtual int pageindex
14         {
15             get { return m_pageindex; }
16             set { m_pageindex = value; }
17         }
18         /// <summary>
19         /// 关联的数据源
20         /// </summary>
21         public virtual list<object> datasource { get; set; }
22         public virtual event pagecontroleventhandler showsourcechanged;
23         private int m_pagesize = 1;
24         /// <summary>
25         /// 每页显示数量
26         /// </summary>
27         [description("每页显示数量"), category("自定义")]
28         public virtual int pagesize
29         {
30             get { return m_pagesize; }
31             set { m_pagesize = value; }
32         }
33         private int startindex = 0;
34         /// <summary>
35         /// 开始的下标
36         /// </summary>
37         [description("开始的下标"), category("自定义")]
38         public virtual int startindex
39         {
40             get { return startindex; }
41             set
42             {
43                 startindex = value;
44                 if (startindex <= 0)
45                     startindex = 0;
46             }
47         }

然后定义虚函数,并做一些默认实现

/// <summary>
        /// 第一页
        /// </summary>
        public virtual void firstpage()
        {
            if (datasource == null)
                return;
            startindex = 0;
            var s = getcurrentsource();

            if (showsourcechanged != null)
            {
                showsourcechanged(s);
            }
        }
        /// <summary>
        /// 上一页
        /// </summary>
        public virtual void previouspage()
        {
            if (datasource == null)
                return;
            if (startindex == 0)
                return;
            startindex -= m_pagesize;
            if (startindex < 0)
                startindex = 0;
            var s = getcurrentsource();

            if (showsourcechanged != null)
            {
                showsourcechanged(s);
            }
        }
        /// <summary>
        /// 下一页
        /// </summary>
        public virtual void nextpage()
        {
            if (datasource == null)
                return;
            if (startindex + m_pagesize >= datasource.count)
            {
                return;
            }
            startindex += m_pagesize;
            if (startindex < 0)
                startindex = 0;
            var s = getcurrentsource();

            if (showsourcechanged != null)
            {
                showsourcechanged(s);
            }
        }
        /// <summary>
        /// 最后一页
        /// </summary>
        public virtual void endpage()
        {
            if (datasource == null)
                return;
            startindex = datasource.count - m_pagesize;
            if (startindex < 0)
                startindex = 0;
            var s = getcurrentsource();

            if (showsourcechanged != null)
            {
                showsourcechanged(s);
            }
        }
        /// <summary>
        /// 刷新数据
        /// </summary>
        public virtual void reload()
        {
            var s = getcurrentsource();
            if (showsourcechanged != null)
            {
                showsourcechanged(s);
            }
        }
        /// <summary>
        /// 获取当前页数据
        /// </summary>
        /// <returns></returns>
        public virtual list<object> getcurrentsource()
        {
            if (datasource == null)
                return null;
            int intshowcount = m_pagesize;
            if (intshowcount + startindex > datasource.count)
                intshowcount = datasource.count - startindex;
            object[] objs = new object[intshowcount];
            datasource.copyto(startindex, objs, 0, intshowcount);
            var lst = objs.tolist();

            bool blnleft = false;
            bool blnright = false;
            if (lst.count > 0)
            {
                if (datasource.indexof(lst[0]) > 0)
                {
                    blnleft = true;
                }
                else
                {
                    blnleft = false;
                }
                if (datasource.indexof(lst[lst.count - 1]) >= datasource.count - 1)
                {
                    blnright = false;
                }
                else
                {
                    blnright = true;
                }
            }
            showbtn(blnleft, blnright);
            return lst;
        }

        /// <summary>
        /// 控制按钮显示
        /// </summary>
        /// <param name="blnleftbtn">是否显示上一页,第一页</param>
        /// <param name="blnrightbtn">是否显示下一页,最后一页</param>
        protected virtual void showbtn(bool blnleftbtn, bool blnrightbtn)
        { }

如此基类就完成了,看下完整代码

  1 // 版权所有  黄正辉  交流群:568015492   qq:623128629
  2 // 文件名称:ucpagercontrolbase.cs
  3 // 创建日期:2019-08-15 16:00:41
  4 // 功能描述:pagecontrol
  5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
  6 using system;
  7 using system.collections.generic;
  8 using system.componentmodel;
  9 using system.drawing;
 10 using system.data;
 11 using system.linq;
 12 using system.text;
 13 using system.windows.forms;
 14 
 15 namespace hzh_controls.controls
 16 {
 17     [toolboxitem(false)]
 18     public class ucpagercontrolbase : usercontrol, ipagecontrol
 19     {
 20         #region 构造
 21         /// <summary> 
 22         /// 必需的设计器变量。
 23         /// </summary>
 24         private system.componentmodel.icontainer components = null;
 25 
 26         /// <summary> 
 27         /// 清理所有正在使用的资源。
 28         /// </summary>
 29         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
 30         protected override void dispose(bool disposing)
 31         {
 32             if (disposing && (components != null))
 33             {
 34                 components.dispose();
 35             }
 36             base.dispose(disposing);
 37         }
 38 
 39         #region 组件设计器生成的代码
 40 
 41         /// <summary> 
 42         /// 设计器支持所需的方法 - 不要
 43         /// 使用代码编辑器修改此方法的内容。
 44         /// </summary>
 45         private void initializecomponent()
 46         {
 47             this.suspendlayout();
 48             // 
 49             // ucpagercontrolbase
 50             // 
 51             this.autoscalemode = system.windows.forms.autoscalemode.none;
 52             this.name = "ucpagercontrolbase";
 53             this.size = new system.drawing.size(304, 58);
 54             this.load += new system.eventhandler(this.ucpagercontrolbase_load);
 55             this.resumelayout(false);
 56 
 57         }
 58 
 59         #endregion
 60         #endregion
 61         /// <summary>
 62         /// 总页数
 63         /// </summary>
 64         public virtual int pagecount
 65         {
 66             get;
 67             set;
 68         }
 69         private int m_pageindex = 1;
 70         /// <summary>
 71         /// 当前页码
 72         /// </summary>
 73         public virtual int pageindex
 74         {
 75             get { return m_pageindex; }
 76             set { m_pageindex = value; }
 77         }
 78         /// <summary>
 79         /// 关联的数据源
 80         /// </summary>
 81         public virtual list<object> datasource { get; set; }
 82         public virtual event pagecontroleventhandler showsourcechanged;
 83         private int m_pagesize = 1;
 84         /// <summary>
 85         /// 每页显示数量
 86         /// </summary>
 87         [description("每页显示数量"), category("自定义")]
 88         public virtual int pagesize
 89         {
 90             get { return m_pagesize; }
 91             set { m_pagesize = value; }
 92         }
 93         private int startindex = 0;
 94         /// <summary>
 95         /// 开始的下标
 96         /// </summary>
 97         [description("开始的下标"), category("自定义")]
 98         public virtual int startindex
 99         {
100             get { return startindex; }
101             set
102             {
103                 startindex = value;
104                 if (startindex <= 0)
105                     startindex = 0;
106             }
107         }
108 
109         public ucpagercontrolbase()
110         {
111             initializecomponent();
112         }
113 
114         private void ucpagercontrolbase_load(object sender, eventargs e)
115         {
116             if (datasource == null)
117                 showbtn(false, false);
118             else
119             {
120                 showbtn(false, datasource.count > pagesize);
121             }
122         }
123         /// <summary>
124         /// 第一页
125         /// </summary>
126         public virtual void firstpage()
127         {
128             if (datasource == null)
129                 return;
130             startindex = 0;
131             var s = getcurrentsource();
132 
133             if (showsourcechanged != null)
134             {
135                 showsourcechanged(s);
136             }
137         }
138         /// <summary>
139         /// 上一页
140         /// </summary>
141         public virtual void previouspage()
142         {
143             if (datasource == null)
144                 return;
145             if (startindex == 0)
146                 return;
147             startindex -= m_pagesize;
148             if (startindex < 0)
149                 startindex = 0;
150             var s = getcurrentsource();
151 
152             if (showsourcechanged != null)
153             {
154                 showsourcechanged(s);
155             }
156         }
157         /// <summary>
158         /// 下一页
159         /// </summary>
160         public virtual void nextpage()
161         {
162             if (datasource == null)
163                 return;
164             if (startindex + m_pagesize >= datasource.count)
165             {
166                 return;
167             }
168             startindex += m_pagesize;
169             if (startindex < 0)
170                 startindex = 0;
171             var s = getcurrentsource();
172 
173             if (showsourcechanged != null)
174             {
175                 showsourcechanged(s);
176             }
177         }
178         /// <summary>
179         /// 最后一页
180         /// </summary>
181         public virtual void endpage()
182         {
183             if (datasource == null)
184                 return;
185             startindex = datasource.count - m_pagesize;
186             if (startindex < 0)
187                 startindex = 0;
188             var s = getcurrentsource();
189 
190             if (showsourcechanged != null)
191             {
192                 showsourcechanged(s);
193             }
194         }
195         /// <summary>
196         /// 刷新数据
197         /// </summary>
198         public virtual void reload()
199         {
200             var s = getcurrentsource();
201             if (showsourcechanged != null)
202             {
203                 showsourcechanged(s);
204             }
205         }
206         /// <summary>
207         /// 获取当前页数据
208         /// </summary>
209         /// <returns></returns>
210         public virtual list<object> getcurrentsource()
211         {
212             if (datasource == null)
213                 return null;
214             int intshowcount = m_pagesize;
215             if (intshowcount + startindex > datasource.count)
216                 intshowcount = datasource.count - startindex;
217             object[] objs = new object[intshowcount];
218             datasource.copyto(startindex, objs, 0, intshowcount);
219             var lst = objs.tolist();
220 
221             bool blnleft = false;
222             bool blnright = false;
223             if (lst.count > 0)
224             {
225                 if (datasource.indexof(lst[0]) > 0)
226                 {
227                     blnleft = true;
228                 }
229                 else
230                 {
231                     blnleft = false;
232                 }
233                 if (datasource.indexof(lst[lst.count - 1]) >= datasource.count - 1)
234                 {
235                     blnright = false;
236                 }
237                 else
238                 {
239                     blnright = true;
240                 }
241             }
242             showbtn(blnleft, blnright);
243             return lst;
244         }
245 
246         /// <summary>
247         /// 控制按钮显示
248         /// </summary>
249         /// <param name="blnleftbtn">是否显示上一页,第一页</param>
250         /// <param name="blnrightbtn">是否显示下一页,最后一页</param>
251         protected virtual void showbtn(bool blnleftbtn, bool blnrightbtn)
252         { }
253     }
254 }

 

接下来就是具体的实现分页控件了,我们将实现2种不同样式的分页控件以适应不通的场景,

第一种

(十二)c#Winform自定义控件-分页控件

 添加用户控件ucpagercontrol,继承ucpagercontrolbase

重新基类的部分函数

 1 private void panel1_mousedown(object sender, mouseeventargs e)
 2         {
 3             previouspage();
 4         }
 5 
 6         private void panel2_mousedown(object sender, mouseeventargs e)
 7         {
 8             nextpage();
 9         }
10 
11         private void panel3_mousedown(object sender, mouseeventargs e)
12         {
13             firstpage();
14         }
15 
16         private void panel4_mousedown(object sender, mouseeventargs e)
17         {
18             endpage();
19         }
20 
21         protected override void showbtn(bool blnleftbtn, bool blnrightbtn)
22         {
23             panel1.visible = panel3.visible = blnleftbtn;
24             panel2.visible = panel4.visible = blnrightbtn;
25         }

完成,是不是很简单,看下全部代码

 1 // 版权所有  黄正辉  交流群:568015492   qq:623128629
 2 // 文件名称:ucpagercontrol.cs
 3 // 创建日期:2019-08-15 16:00:32
 4 // 功能描述:pagecontrol
 5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
 6 using system;
 7 using system.collections.generic;
 8 using system.componentmodel;
 9 using system.drawing;
10 using system.data;
11 using system.linq;
12 using system.text;
13 using system.windows.forms;
14 
15 namespace hzh_controls.controls
16 {
17     [toolboxitem(true)]
18     public partial class ucpagercontrol : ucpagercontrolbase
19     {
20         public ucpagercontrol()
21         {
22             initializecomponent();
23         }
24 
25         private void panel1_mousedown(object sender, mouseeventargs e)
26         {
27             previouspage();
28         }
29 
30         private void panel2_mousedown(object sender, mouseeventargs e)
31         {
32             nextpage();
33         }
34 
35         private void panel3_mousedown(object sender, mouseeventargs e)
36         {
37             firstpage();
38         }
39 
40         private void panel4_mousedown(object sender, mouseeventargs e)
41         {
42             endpage();
43         }
44 
45         protected override void showbtn(bool blnleftbtn, bool blnrightbtn)
46         {
47             panel1.visible = panel3.visible = blnleftbtn;
48             panel2.visible = panel4.visible = blnrightbtn;
49         }
50     }
51 }
  1 namespace hzh_controls.controls
  2 {
  3     partial class ucpagercontrol
  4     {
  5         /// <summary> 
  6         /// 必需的设计器变量。
  7         /// </summary>
  8         private system.componentmodel.icontainer components = null;
  9 
 10         /// <summary> 
 11         /// 清理所有正在使用的资源。
 12         /// </summary>
 13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
 14         protected override void dispose(bool disposing)
 15         {
 16             if (disposing && (components != null))
 17             {
 18                 components.dispose();
 19             }
 20             base.dispose(disposing);
 21         }
 22 
 23         #region 组件设计器生成的代码
 24 
 25         /// <summary> 
 26         /// 设计器支持所需的方法 - 不要
 27         /// 使用代码编辑器修改此方法的内容。
 28         /// </summary>
 29         private void initializecomponent()
 30         {
 31             this.tablelayoutpanel1 = new system.windows.forms.tablelayoutpanel();
 32             this.panel4 = new system.windows.forms.panel();
 33             this.panel3 = new system.windows.forms.panel();
 34             this.panel2 = new system.windows.forms.panel();
 35             this.panel1 = new system.windows.forms.panel();
 36             this.tablelayoutpanel1.suspendlayout();
 37             this.suspendlayout();
 38             // 
 39             // tablelayoutpanel1
 40             // 
 41             this.tablelayoutpanel1.columncount = 4;
 42             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.percent, 25f));
 43             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.percent, 25f));
 44             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.percent, 25f));
 45             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.percent, 25f));
 46             this.tablelayoutpanel1.controls.add(this.panel4, 3, 0);
 47             this.tablelayoutpanel1.controls.add(this.panel3, 0, 0);
 48             this.tablelayoutpanel1.controls.add(this.panel2, 2, 0);
 49             this.tablelayoutpanel1.controls.add(this.panel1, 1, 0);
 50             this.tablelayoutpanel1.dock = system.windows.forms.dockstyle.fill;
 51             this.tablelayoutpanel1.location = new system.drawing.point(0, 0);
 52             this.tablelayoutpanel1.name = "tablelayoutpanel1";
 53             this.tablelayoutpanel1.padding = new system.windows.forms.padding(3);
 54             this.tablelayoutpanel1.rowcount = 1;
 55             this.tablelayoutpanel1.rowstyles.add(new system.windows.forms.rowstyle(system.windows.forms.sizetype.percent, 100f));
 56             this.tablelayoutpanel1.size = new system.drawing.size(304, 58);
 57             this.tablelayoutpanel1.tabindex = 1;
 58             // 
 59             // panel4
 60             // 
 61             this.panel4.backgroundimage = global::hzh_controls.properties.resources.end;
 62             this.panel4.backgroundimagelayout = system.windows.forms.imagelayout.zoom;
 63             this.panel4.location = new system.drawing.point(228, 6);
 64             this.panel4.name = "panel4";
 65             this.panel4.size = new system.drawing.size(68, 46);
 66             this.panel4.tabindex = 3;
 67             this.panel4.mousedown += new system.windows.forms.mouseeventhandler(this.panel4_mousedown);
 68             // 
 69             // panel3
 70             // 
 71             this.panel3.backgroundimage = global::hzh_controls.properties.resources.first;
 72             this.panel3.backgroundimagelayout = system.windows.forms.imagelayout.zoom;
 73             this.panel3.location = new system.drawing.point(6, 6);
 74             this.panel3.name = "panel3";
 75             this.panel3.size = new system.drawing.size(68, 46);
 76             this.panel3.tabindex = 2;
 77             this.panel3.mousedown += new system.windows.forms.mouseeventhandler(this.panel3_mousedown);
 78             // 
 79             // panel2
 80             // 
 81             this.panel2.backgroundimage = global::hzh_controls.properties.resources.right;
 82             this.panel2.backgroundimagelayout = system.windows.forms.imagelayout.zoom;
 83             this.panel2.location = new system.drawing.point(154, 6);
 84             this.panel2.name = "panel2";
 85             this.panel2.size = new system.drawing.size(68, 46);
 86             this.panel2.tabindex = 1;
 87             this.panel2.mousedown += new system.windows.forms.mouseeventhandler(this.panel2_mousedown);
 88             // 
 89             // panel1
 90             // 
 91             this.panel1.backgroundimage = global::hzh_controls.properties.resources.left;
 92             this.panel1.backgroundimagelayout = system.windows.forms.imagelayout.zoom;
 93             this.panel1.location = new system.drawing.point(80, 6);
 94             this.panel1.name = "panel1";
 95             this.panel1.size = new system.drawing.size(68, 46);
 96             this.panel1.tabindex = 0;
 97             this.panel1.mousedown += new system.windows.forms.mouseeventhandler(this.panel1_mousedown);
 98             // 
 99             // ucpagercontrol
100             // 
101             this.autoscalemode = system.windows.forms.autoscalemode.none;
102             this.controls.add(this.tablelayoutpanel1);
103             this.name = "ucpagercontrol";
104             this.tablelayoutpanel1.resumelayout(false);
105             this.resumelayout(false);
106 
107         }
108 
109         #endregion
110 
111         private system.windows.forms.tablelayoutpanel tablelayoutpanel1;
112         private system.windows.forms.panel panel4;
113         private system.windows.forms.panel panel3;
114         private system.windows.forms.panel panel2;
115         private system.windows.forms.panel panel1;
116     }
117 }

 

第二种

(十二)c#Winform自定义控件-分页控件

这种和第一种的唯一区别就是页面计算生成的部分了

添加一个用户控件ucpagercontrol2,继承ucpagercontrolbase

属性如下

 1  public override event pagecontroleventhandler showsourcechanged;
 2 
 3         private list<object> m_datasource;
 4         public override list<object> datasource
 5         {
 6             get
 7             {
 8                 return m_datasource;
 9             }
10             set
11             {
12                 m_datasource = value;
13                 if (m_datasource == null)
14                     m_datasource = new list<object>();
15                 resetpagecount();
16             }
17         }
18         private int m_intpagesize = 0;
19         public override int pagesize
20         {
21             get
22             {
23                 return m_intpagesize;
24             }
25             set
26             {
27                 m_intpagesize = value;
28                 resetpagecount();
29             }
30         }

其他更多的属性直接用基类的就可以

重写基类函数

 1         public override void firstpage()
 2         {
 3             if (pageindex == 1)
 4                 return;
 5             pageindex = 1;
 6             startindex = (pageindex - 1) * pagesize;
 7             reloadpage();
 8             var s = getcurrentsource();
 9             if (showsourcechanged != null)
10             {
11                 showsourcechanged(s);
12             }
13         }
14 
15         public override void previouspage()
16         {
17             if (pageindex <= 1)
18             {
19                 return;
20             }
21             pageindex--;
22 
23             startindex = (pageindex - 1) * pagesize;
24             reloadpage();
25             var s = getcurrentsource();
26             if (showsourcechanged != null)
27             {
28                 showsourcechanged(s);
29             }
30         }
31 
32         public override void nextpage()
33         {
34             if (pageindex >= pagecount)
35             {
36                 return;
37             }
38             pageindex++;
39             startindex = (pageindex - 1) * pagesize;
40             reloadpage();
41             var s = getcurrentsource();
42             if (showsourcechanged != null)
43             {
44                 showsourcechanged(s);
45             }
46         }
47 
48         public override void endpage()
49         {
50             if (pageindex == pagecount)
51                 return;
52             pageindex = pagecount;
53             startindex = (pageindex - 1) * pagesize;
54             reloadpage();
55             var s = getcurrentsource();
56             if (showsourcechanged != null)
57             {
58                 showsourcechanged(s);
59             }
60         }
61  
62        protected override void showbtn(bool blnleftbtn, bool blnrightbtn)
63         {
64             btnfirst.enabled = btnprevious.enabled = blnleftbtn;
65             btnnext.enabled = btnend.enabled = blnrightbtn;
66         }

 

一个重置总页数的函数

 1  private void resetpagecount()
 2         {
 3             if (pagesize > 0)
 4             {
 5                 pagecount = m_datasource.count / m_intpagesize + (m_datasource.count % m_intpagesize > 0 ? 1 : 0);
 6             }
 7             txtpage.maxvalue = pagecount;
 8             txtpage.minvalue = 1;
 9             reloadpage();
10         }

一个重置计算当前页码列表的函数

  private void reloadpage()
        {
            try
            {
                controlhelper.freezecontrol(tablelayoutpanel1, true);
                list<int> lst = new list<int>();

                if (pagecount <= 9)
                {
                    for (var i = 1; i <= pagecount; i++)
                    {
                        lst.add(i);
                    }
                }
                else
                {
                    if (this.pageindex <= 6)
                    {
                        for (var i = 1; i <= 7; i++)
                        {
                            lst.add(i);
                        }
                        lst.add(-1);
                        lst.add(pagecount);
                    }
                    else if (this.pageindex > pagecount - 6)
                    {
                        lst.add(1);
                        lst.add(-1);
                        for (var i = pagecount - 6; i <= pagecount; i++)
                        {
                            lst.add(i);
                        }
                    }
                    else
                    {
                        lst.add(1);
                        lst.add(-1);
                        var begin = pageindex - 2;
                        var end = pageindex + 2;
                        if (end > pagecount)
                        {
                            end = pagecount;
                            begin = end - 4;
                            if (pageindex - begin < 2)
                            {
                                begin = begin - 1;
                            }
                        }
                        else if (end + 1 == pagecount)
                        {
                            end = pagecount;
                        }
                        for (var i = begin; i <= end; i++)
                        {
                            lst.add(i);
                        }
                        if (end != pagecount)
                        {
                            lst.add(-1);
                            lst.add(pagecount);
                        }
                    }
                }

                for (int i = 0; i < 9; i++)
                {
                    ucbtnext c = (ucbtnext)this.tablelayoutpanel1.controls.find("p" + (i + 1), false)[0];
                    if (i >= lst.count)
                    {
                        c.visible = false;
                    }
                    else
                    {
                        if (lst[i] == -1)
                        {
                            c.btntext = "...";
                            c.enabled = false;
                        }
                        else
                        {
                            c.btntext = lst[i].tostring();
                            c.enabled = true;
                        }
                        c.visible = true;
                        if (lst[i] == pageindex)
                        {
                            c.rectcolor = color.fromargb(255, 77, 59);
                        }
                        else
                        {
                            c.rectcolor = color.fromargb(223, 223, 223);
                        }
                    }
                }
                showbtn(pageindex > 1, pageindex < pagecount);
            }
            finally
            {
                controlhelper.freezecontrol(tablelayoutpanel1, false);
            }
        }

跳转页面

 1  private void page_btnclick(object sender, eventargs e)
 2         {
 3             pageindex = (sender as ucbtnext).btntext.toint();
 4             startindex = (pageindex - 1) * pagesize;
 5             reloadpage();
 6             var s = getcurrentsource();
 7 
 8             if (showsourcechanged != null)
 9             {
10                 showsourcechanged(s);
11             }
12         }
13  private void btnfirst_btnclick(object sender, eventargs e)
14         {
15             firstpage();
16         }
17 
18         private void btnprevious_btnclick(object sender, eventargs e)
19         {
20             previouspage();
21         }
22 
23         private void btnnext_btnclick(object sender, eventargs e)
24         {
25             nextpage();
26         }
27 
28         private void btnend_btnclick(object sender, eventargs e)
29         {
30             endpage();
31         }
32 
33         private void btntopage_btnclick(object sender, eventargs e)
34         {
35             if (!string.isnullorempty(txtpage.inputtext))
36             {
37                 pageindex = txtpage.inputtext.toint();
38                 startindex = (pageindex - 1) * pagesize;
39                 reloadpage();
40                 var s = getcurrentsource();
41                 if (showsourcechanged != null)
42                 {
43                     showsourcechanged(s);
44                 }
45             }
46         }

至此完成所有逻辑,看下完整代码

  1 // 版权所有  黄正辉  交流群:568015492   qq:623128629
  2 // 文件名称:ucpagercontrol2.cs
  3 // 创建日期:2019-08-15 16:00:37
  4 // 功能描述:pagecontrol
  5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
  6 using system;
  7 using system.collections.generic;
  8 using system.componentmodel;
  9 using system.drawing;
 10 using system.data;
 11 using system.linq;
 12 using system.text;
 13 using system.windows.forms;
 14 
 15 namespace hzh_controls.controls.list
 16 {
 17     [toolboxitem(true)]
 18     public partial class ucpagercontrol2 : ucpagercontrolbase
 19     {
 20         public ucpagercontrol2()
 21         {
 22             initializecomponent();
 23             txtpage.txtinput.keydown += txtinput_keydown;
 24         }
 25 
 26         void txtinput_keydown(object sender, keyeventargs e)
 27         {
 28             if (e.keycode == keys.enter)
 29             {
 30                 btntopage_btnclick(null, null);
 31                 txtpage.inputtext = "";
 32             }
 33         }
 34 
 35         public override event pagecontroleventhandler showsourcechanged;
 36 
 37         private list<object> m_datasource;
 38         public override list<object> datasource
 39         {
 40             get
 41             {
 42                 return m_datasource;
 43             }
 44             set
 45             {
 46                 m_datasource = value;
 47                 if (m_datasource == null)
 48                     m_datasource = new list<object>();
 49                 resetpagecount();
 50             }
 51         }
 52         private int m_intpagesize = 0;
 53         public override int pagesize
 54         {
 55             get
 56             {
 57                 return m_intpagesize;
 58             }
 59             set
 60             {
 61                 m_intpagesize = value;
 62                 resetpagecount();
 63             }
 64         }
 65 
 66         public override void firstpage()
 67         {
 68             if (pageindex == 1)
 69                 return;
 70             pageindex = 1;
 71             startindex = (pageindex - 1) * pagesize;
 72             reloadpage();
 73             var s = getcurrentsource();
 74             if (showsourcechanged != null)
 75             {
 76                 showsourcechanged(s);
 77             }
 78         }
 79 
 80         public override void previouspage()
 81         {
 82             if (pageindex <= 1)
 83             {
 84                 return;
 85             }
 86             pageindex--;
 87 
 88             startindex = (pageindex - 1) * pagesize;
 89             reloadpage();
 90             var s = getcurrentsource();
 91             if (showsourcechanged != null)
 92             {
 93                 showsourcechanged(s);
 94             }
 95         }
 96 
 97         public override void nextpage()
 98         {
 99             if (pageindex >= pagecount)
100             {
101                 return;
102             }
103             pageindex++;
104             startindex = (pageindex - 1) * pagesize;
105             reloadpage();
106             var s = getcurrentsource();
107             if (showsourcechanged != null)
108             {
109                 showsourcechanged(s);
110             }
111         }
112 
113         public override void endpage()
114         {
115             if (pageindex == pagecount)
116                 return;
117             pageindex = pagecount;
118             startindex = (pageindex - 1) * pagesize;
119             reloadpage();
120             var s = getcurrentsource();
121             if (showsourcechanged != null)
122             {
123                 showsourcechanged(s);
124             }
125         }
126 
127         private void resetpagecount()
128         {
129             if (pagesize > 0)
130             {
131                 pagecount = m_datasource.count / m_intpagesize + (m_datasource.count % m_intpagesize > 0 ? 1 : 0);
132             }
133             txtpage.maxvalue = pagecount;
134             txtpage.minvalue = 1;
135             reloadpage();
136         }
137 
138         private void reloadpage()
139         {
140             try
141             {
142                 controlhelper.freezecontrol(tablelayoutpanel1, true);
143                 list<int> lst = new list<int>();
144 
145                 if (pagecount <= 9)
146                 {
147                     for (var i = 1; i <= pagecount; i++)
148                     {
149                         lst.add(i);
150                     }
151                 }
152                 else
153                 {
154                     if (this.pageindex <= 6)
155                     {
156                         for (var i = 1; i <= 7; i++)
157                         {
158                             lst.add(i);
159                         }
160                         lst.add(-1);
161                         lst.add(pagecount);
162                     }
163                     else if (this.pageindex > pagecount - 6)
164                     {
165                         lst.add(1);
166                         lst.add(-1);
167                         for (var i = pagecount - 6; i <= pagecount; i++)
168                         {
169                             lst.add(i);
170                         }
171                     }
172                     else
173                     {
174                         lst.add(1);
175                         lst.add(-1);
176                         var begin = pageindex - 2;
177                         var end = pageindex + 2;
178                         if (end > pagecount)
179                         {
180                             end = pagecount;
181                             begin = end - 4;
182                             if (pageindex - begin < 2)
183                             {
184                                 begin = begin - 1;
185                             }
186                         }
187                         else if (end + 1 == pagecount)
188                         {
189                             end = pagecount;
190                         }
191                         for (var i = begin; i <= end; i++)
192                         {
193                             lst.add(i);
194                         }
195                         if (end != pagecount)
196                         {
197                             lst.add(-1);
198                             lst.add(pagecount);
199                         }
200                     }
201                 }
202 
203                 for (int i = 0; i < 9; i++)
204                 {
205                     ucbtnext c = (ucbtnext)this.tablelayoutpanel1.controls.find("p" + (i + 1), false)[0];
206                     if (i >= lst.count)
207                     {
208                         c.visible = false;
209                     }
210                     else
211                     {
212                         if (lst[i] == -1)
213                         {
214                             c.btntext = "...";
215                             c.enabled = false;
216                         }
217                         else
218                         {
219                             c.btntext = lst[i].tostring();
220                             c.enabled = true;
221                         }
222                         c.visible = true;
223                         if (lst[i] == pageindex)
224                         {
225                             c.rectcolor = color.fromargb(255, 77, 59);
226                         }
227                         else
228                         {
229                             c.rectcolor = color.fromargb(223, 223, 223);
230                         }
231                     }
232                 }
233                 showbtn(pageindex > 1, pageindex < pagecount);
234             }
235             finally
236             {
237                 controlhelper.freezecontrol(tablelayoutpanel1, false);
238             }
239         }
240 
241         private void page_btnclick(object sender, eventargs e)
242         {
243             pageindex = (sender as ucbtnext).btntext.toint();
244             startindex = (pageindex - 1) * pagesize;
245             reloadpage();
246             var s = getcurrentsource();
247 
248             if (showsourcechanged != null)
249             {
250                 showsourcechanged(s);
251             }
252         }
253 
254         protected override void showbtn(bool blnleftbtn, bool blnrightbtn)
255         {
256             btnfirst.enabled = btnprevious.enabled = blnleftbtn;
257             btnnext.enabled = btnend.enabled = blnrightbtn;
258         }
259 
260         private void btnfirst_btnclick(object sender, eventargs e)
261         {
262             firstpage();
263         }
264 
265         private void btnprevious_btnclick(object sender, eventargs e)
266         {
267             previouspage();
268         }
269 
270         private void btnnext_btnclick(object sender, eventargs e)
271         {
272             nextpage();
273         }
274 
275         private void btnend_btnclick(object sender, eventargs e)
276         {
277             endpage();
278         }
279 
280         private void btntopage_btnclick(object sender, eventargs e)
281         {
282             if (!string.isnullorempty(txtpage.inputtext))
283             {
284                 pageindex = txtpage.inputtext.toint();
285                 startindex = (pageindex - 1) * pagesize;
286                 reloadpage();
287                 var s = getcurrentsource();
288                 if (showsourcechanged != null)
289                 {
290                     showsourcechanged(s);
291                 }
292             }
293         }
294 
295     }
296 }
  1 namespace hzh_controls.controls.list
  2 {
  3     partial class ucpagercontrol2
  4     {
  5         /// <summary> 
  6         /// 必需的设计器变量。
  7         /// </summary>
  8         private system.componentmodel.icontainer components = null;
  9 
 10         /// <summary> 
 11         /// 清理所有正在使用的资源。
 12         /// </summary>
 13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
 14         protected override void dispose(bool disposing)
 15         {
 16             if (disposing && (components != null))
 17             {
 18                 components.dispose();
 19             }
 20             base.dispose(disposing);
 21         }
 22 
 23         #region 组件设计器生成的代码
 24 
 25         /// <summary> 
 26         /// 设计器支持所需的方法 - 不要
 27         /// 使用代码编辑器修改此方法的内容。
 28         /// </summary>
 29         private void initializecomponent()
 30         {
 31             this.btnfirst = new hzh_controls.controls.ucbtnext();
 32             this.btnprevious = new hzh_controls.controls.ucbtnext();
 33             this.tablelayoutpanel1 = new system.windows.forms.tablelayoutpanel();
 34             this.p9 = new hzh_controls.controls.ucbtnext();
 35             this.p1 = new hzh_controls.controls.ucbtnext();
 36             this.btntopage = new hzh_controls.controls.ucbtnext();
 37             this.btnend = new hzh_controls.controls.ucbtnext();
 38             this.btnnext = new hzh_controls.controls.ucbtnext();
 39             this.p8 = new hzh_controls.controls.ucbtnext();
 40             this.p7 = new hzh_controls.controls.ucbtnext();
 41             this.p6 = new hzh_controls.controls.ucbtnext();
 42             this.p5 = new hzh_controls.controls.ucbtnext();
 43             this.p4 = new hzh_controls.controls.ucbtnext();
 44             this.p3 = new hzh_controls.controls.ucbtnext();
 45             this.p2 = new hzh_controls.controls.ucbtnext();
 46             this.txtpage = new hzh_controls.controls.uctextboxex();
 47             this.tablelayoutpanel1.suspendlayout();
 48             this.suspendlayout();
 49             // 
 50             // btnfirst
 51             // 
 52             this.btnfirst.backcolor = system.drawing.color.white;
 53             this.btnfirst.btnbackcolor = system.drawing.color.white;
 54             this.btnfirst.btnfont = new system.drawing.font("微软雅黑", 9f);
 55             this.btnfirst.btnforecolor = system.drawing.color.gray;
 56             this.btnfirst.btntext = "<<";
 57             this.btnfirst.conerradius = 5;
 58             this.btnfirst.cursor = system.windows.forms.cursors.hand;
 59             this.btnfirst.dock = system.windows.forms.dockstyle.fill;
 60             this.btnfirst.fillcolor = system.drawing.color.white;
 61             this.btnfirst.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
 62             this.btnfirst.isradius = true;
 63             this.btnfirst.isshowrect = true;
 64             this.btnfirst.isshowtips = false;
 65             this.btnfirst.location = new system.drawing.point(5, 5);
 66             this.btnfirst.margin = new system.windows.forms.padding(5);
 67             this.btnfirst.name = "btnfirst";
 68             this.btnfirst.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
 69             this.btnfirst.rectwidth = 1;
 70             this.btnfirst.size = new system.drawing.size(30, 30);
 71             this.btnfirst.tabindex = 0;
 72             this.btnfirst.tabstop = false;
 73             this.btnfirst.tipstext = "";
 74             this.btnfirst.btnclick += new system.eventhandler(this.btnfirst_btnclick);
 75             // 
 76             // btnprevious
 77             // 
 78             this.btnprevious.backcolor = system.drawing.color.white;
 79             this.btnprevious.btnbackcolor = system.drawing.color.white;
 80             this.btnprevious.btnfont = new system.drawing.font("微软雅黑", 9f);
 81             this.btnprevious.btnforecolor = system.drawing.color.gray;
 82             this.btnprevious.btntext = "<";
 83             this.btnprevious.conerradius = 5;
 84             this.btnprevious.cursor = system.windows.forms.cursors.hand;
 85             this.btnprevious.dock = system.windows.forms.dockstyle.fill;
 86             this.btnprevious.fillcolor = system.drawing.color.white;
 87             this.btnprevious.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
 88             this.btnprevious.isradius = true;
 89             this.btnprevious.isshowrect = true;
 90             this.btnprevious.isshowtips = false;
 91             this.btnprevious.location = new system.drawing.point(45, 5);
 92             this.btnprevious.margin = new system.windows.forms.padding(5);
 93             this.btnprevious.name = "btnprevious";
 94             this.btnprevious.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
 95             this.btnprevious.rectwidth = 1;
 96             this.btnprevious.size = new system.drawing.size(30, 30);
 97             this.btnprevious.tabindex = 1;
 98             this.btnprevious.tabstop = false;
 99             this.btnprevious.tipstext = "";
100             this.btnprevious.btnclick += new system.eventhandler(this.btnprevious_btnclick);
101             // 
102             // tablelayoutpanel1
103             // 
104             this.tablelayoutpanel1.anchor = ((system.windows.forms.anchorstyles)((system.windows.forms.anchorstyles.top | system.windows.forms.anchorstyles.bottom)));
105             this.tablelayoutpanel1.columncount = 15;
106             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
107             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
108             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
109             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
110             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
111             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
112             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
113             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
114             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
115             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
116             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
117             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
118             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 40f));
119             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 70f));
120             this.tablelayoutpanel1.columnstyles.add(new system.windows.forms.columnstyle(system.windows.forms.sizetype.absolute, 70f));
121             this.tablelayoutpanel1.controls.add(this.p9, 10, 0);
122             this.tablelayoutpanel1.controls.add(this.p1, 2, 0);
123             this.tablelayoutpanel1.controls.add(this.btntopage, 14, 0);
124             this.tablelayoutpanel1.controls.add(this.btnend, 12, 0);
125             this.tablelayoutpanel1.controls.add(this.btnnext, 11, 0);
126             this.tablelayoutpanel1.controls.add(this.p8, 9, 0);
127             this.tablelayoutpanel1.controls.add(this.p7, 8, 0);
128             this.tablelayoutpanel1.controls.add(this.p6, 7, 0);
129             this.tablelayoutpanel1.controls.add(this.p5, 6, 0);
130             this.tablelayoutpanel1.controls.add(this.p4, 5, 0);
131             this.tablelayoutpanel1.controls.add(this.p3, 4, 0);
132             this.tablelayoutpanel1.controls.add(this.p2, 3, 0);
133             this.tablelayoutpanel1.controls.add(this.btnprevious, 1, 0);
134             this.tablelayoutpanel1.controls.add(this.btnfirst, 0, 0);
135             this.tablelayoutpanel1.controls.add(this.txtpage, 13, 0);
136             this.tablelayoutpanel1.location = new system.drawing.point(129, 0);
137             this.tablelayoutpanel1.name = "tablelayoutpanel1";
138             this.tablelayoutpanel1.rowcount = 1;
139             this.tablelayoutpanel1.rowstyles.add(new system.windows.forms.rowstyle(system.windows.forms.sizetype.percent, 100f));
140             this.tablelayoutpanel1.size = new system.drawing.size(662, 40);
141             this.tablelayoutpanel1.tabindex = 1;
142             // 
143             // p9
144             // 
145             this.p9.backcolor = system.drawing.color.white;
146             this.p9.btnbackcolor = system.drawing.color.white;
147             this.p9.btnfont = new system.drawing.font("微软雅黑", 9f);
148             this.p9.btnforecolor = system.drawing.color.gray;
149             this.p9.btntext = "9";
150             this.p9.conerradius = 5;
151             this.p9.cursor = system.windows.forms.cursors.hand;
152             this.p9.dock = system.windows.forms.dockstyle.fill;
153             this.p9.fillcolor = system.drawing.color.white;
154             this.p9.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
155             this.p9.isradius = true;
156             this.p9.isshowrect = true;
157             this.p9.isshowtips = false;
158             this.p9.location = new system.drawing.point(402, 5);
159             this.p9.margin = new system.windows.forms.padding(2, 5, 2, 5);
160             this.p9.name = "p9";
161             this.p9.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
162             this.p9.rectwidth = 1;
163             this.p9.size = new system.drawing.size(36, 30);
164             this.p9.tabindex = 17;
165             this.p9.tabstop = false;
166             this.p9.tipstext = "";
167             this.p9.btnclick += new system.eventhandler(this.page_btnclick);
168             // 
169             // p1
170             // 
171             this.p1.backcolor = system.drawing.color.white;
172             this.p1.btnbackcolor = system.drawing.color.white;
173             this.p1.btnfont = new system.drawing.font("微软雅黑", 9f);
174             this.p1.btnforecolor = system.drawing.color.gray;
175             this.p1.btntext = "1";
176             this.p1.conerradius = 5;
177             this.p1.cursor = system.windows.forms.cursors.hand;
178             this.p1.dock = system.windows.forms.dockstyle.fill;
179             this.p1.fillcolor = system.drawing.color.white;
180             this.p1.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
181             this.p1.isradius = true;
182             this.p1.isshowrect = true;
183             this.p1.isshowtips = false;
184             this.p1.location = new system.drawing.point(82, 5);
185             this.p1.margin = new system.windows.forms.padding(2, 5, 2, 5);
186             this.p1.name = "p1";
187             this.p1.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
188             this.p1.rectwidth = 1;
189             this.p1.size = new system.drawing.size(36, 30);
190             this.p1.tabindex = 16;
191             this.p1.tabstop = false;
192             this.p1.tipstext = "";
193             this.p1.btnclick += new system.eventhandler(this.page_btnclick);
194             // 
195             // btntopage
196             // 
197             this.btntopage.backcolor = system.drawing.color.white;
198             this.btntopage.btnbackcolor = system.drawing.color.white;
199             this.btntopage.btnfont = new system.drawing.font("微软雅黑", 11f);
200             this.btntopage.btnforecolor = system.drawing.color.gray;
201             this.btntopage.btntext = "跳转";
202             this.btntopage.conerradius = 5;
203             this.btntopage.cursor = system.windows.forms.cursors.hand;
204             this.btntopage.dock = system.windows.forms.dockstyle.fill;
205             this.btntopage.fillcolor = system.drawing.color.white;
206             this.btntopage.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
207             this.btntopage.isradius = true;
208             this.btntopage.isshowrect = true;
209             this.btntopage.isshowtips = false;
210             this.btntopage.location = new system.drawing.point(595, 5);
211             this.btntopage.margin = new system.windows.forms.padding(5);
212             this.btntopage.name = "btntopage";
213             this.btntopage.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
214             this.btntopage.rectwidth = 1;
215             this.btntopage.size = new system.drawing.size(62, 30);
216             this.btntopage.tabindex = 15;
217             this.btntopage.tabstop = false;
218             this.btntopage.tipstext = "";
219             this.btntopage.btnclick += new system.eventhandler(this.btntopage_btnclick);
220             // 
221             // btnend
222             // 
223             this.btnend.backcolor = system.drawing.color.white;
224             this.btnend.btnbackcolor = system.drawing.color.white;
225             this.btnend.btnfont = new system.drawing.font("微软雅黑", 9f);
226             this.btnend.btnforecolor = system.drawing.color.gray;
227             this.btnend.btntext = ">>";
228             this.btnend.conerradius = 5;
229             this.btnend.cursor = system.windows.forms.cursors.hand;
230             this.btnend.dock = system.windows.forms.dockstyle.fill;
231             this.btnend.fillcolor = system.drawing.color.white;
232             this.btnend.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
233             this.btnend.isradius = true;
234             this.btnend.isshowrect = true;
235             this.btnend.isshowtips = false;
236             this.btnend.location = new system.drawing.point(485, 5);
237             this.btnend.margin = new system.windows.forms.padding(5);
238             this.btnend.name = "btnend";
239             this.btnend.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
240             this.btnend.rectwidth = 1;
241             this.btnend.size = new system.drawing.size(30, 30);
242             this.btnend.tabindex = 13;
243             this.btnend.tabstop = false;
244             this.btnend.tipstext = "";
245             this.btnend.btnclick += new system.eventhandler(this.btnend_btnclick);
246             // 
247             // btnnext
248             // 
249             this.btnnext.backcolor = system.drawing.color.white;
250             this.btnnext.btnbackcolor = system.drawing.color.white;
251             this.btnnext.btnfont = new system.drawing.font("微软雅黑", 9f);
252             this.btnnext.btnforecolor = system.drawing.color.gray;
253             this.btnnext.btntext = ">";
254             this.btnnext.conerradius = 5;
255             this.btnnext.cursor = system.windows.forms.cursors.hand;
256             this.btnnext.dock = system.windows.forms.dockstyle.fill;
257             this.btnnext.fillcolor = system.drawing.color.white;
258             this.btnnext.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
259             this.btnnext.isradius = true;
260             this.btnnext.isshowrect = true;
261             this.btnnext.isshowtips = false;
262             this.btnnext.location = new system.drawing.point(445, 5);
263             this.btnnext.margin = new system.windows.forms.padding(5);
264             this.btnnext.name = "btnnext";
265             this.btnnext.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
266             this.btnnext.rectwidth = 1;
267             this.btnnext.size = new system.drawing.size(30, 30);
268             this.btnnext.tabindex = 12;
269             this.btnnext.tabstop = false;
270             this.btnnext.tipstext = "";
271             this.btnnext.btnclick += new system.eventhandler(this.btnnext_btnclick);
272             // 
273             // p8
274             // 
275             this.p8.backcolor = system.drawing.color.white;
276             this.p8.btnbackcolor = system.drawing.color.white;
277             this.p8.btnfont = new system.drawing.font("微软雅黑", 9f);
278             this.p8.btnforecolor = system.drawing.color.gray;
279             this.p8.btntext = "8";
280             this.p8.conerradius = 5;
281             this.p8.cursor = system.windows.forms.cursors.hand;
282             this.p8.dock = system.windows.forms.dockstyle.fill;
283             this.p8.fillcolor = system.drawing.color.white;
284             this.p8.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
285             this.p8.isradius = true;
286             this.p8.isshowrect = true;
287             this.p8.isshowtips = false;
288             this.p8.location = new system.drawing.point(362, 5);
289             this.p8.margin = new system.windows.forms.padding(2, 5, 2, 5);
290             this.p8.name = "p8";
291             this.p8.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
292             this.p8.rectwidth = 1;
293             this.p8.size = new system.drawing.size(36, 30);
294             this.p8.tabindex = 8;
295             this.p8.tabstop = false;
296             this.p8.tipstext = "";
297             this.p8.btnclick += new system.eventhandler(this.page_btnclick);
298             // 
299             // p7
300             // 
301             this.p7.backcolor = system.drawing.color.white;
302             this.p7.btnbackcolor = system.drawing.color.white;
303             this.p7.btnfont = new system.drawing.font("微软雅黑", 9f);
304             this.p7.btnforecolor = system.drawing.color.gray;
305             this.p7.btntext = "7";
306             this.p7.conerradius = 5;
307             this.p7.cursor = system.windows.forms.cursors.hand;
308             this.p7.dock = system.windows.forms.dockstyle.fill;
309             this.p7.fillcolor = system.drawing.color.white;
310             this.p7.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
311             this.p7.isradius = true;
312             this.p7.isshowrect = true;
313             this.p7.isshowtips = false;
314             this.p7.location = new system.drawing.point(322, 5);
315             this.p7.margin = new system.windows.forms.padding(2, 5, 2, 5);
316             this.p7.name = "p7";
317             this.p7.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
318             this.p7.rectwidth = 1;
319             this.p7.size = new system.drawing.size(36, 30);
320             this.p7.tabindex = 7;
321             this.p7.tabstop = false;
322             this.p7.tipstext = "";
323             this.p7.btnclick += new system.eventhandler(this.page_btnclick);
324             // 
325             // p6
326             // 
327             this.p6.backcolor = system.drawing.color.white;
328             this.p6.btnbackcolor = system.drawing.color.white;
329             this.p6.btnfont = new system.drawing.font("微软雅黑", 9f);
330             this.p6.btnforecolor = system.drawing.color.gray;
331             this.p6.btntext = "6";
332             this.p6.conerradius = 5;
333             this.p6.cursor = system.windows.forms.cursors.hand;
334             this.p6.dock = system.windows.forms.dockstyle.fill;
335             this.p6.fillcolor = system.drawing.color.white;
336             this.p6.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
337             this.p6.isradius = true;
338             this.p6.isshowrect = true;
339             this.p6.isshowtips = false;
340             this.p6.location = new system.drawing.point(282, 5);
341             this.p6.margin = new system.windows.forms.padding(2, 5, 2, 5);
342             this.p6.name = "p6";
343             this.p6.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
344             this.p6.rectwidth = 1;
345             this.p6.size = new system.drawing.size(36, 30);
346             this.p6.tabindex = 6;
347             this.p6.tabstop = false;
348             this.p6.tipstext = "";
349             this.p6.btnclick += new system.eventhandler(this.page_btnclick);
350             // 
351             // p5
352             // 
353             this.p5.backcolor = system.drawing.color.white;
354             this.p5.btnbackcolor = system.drawing.color.white;
355             this.p5.btnfont = new system.drawing.font("微软雅黑", 9f);
356             this.p5.btnforecolor = system.drawing.color.gray;
357             this.p5.btntext = "5";
358             this.p5.conerradius = 5;
359             this.p5.cursor = system.windows.forms.cursors.hand;
360             this.p5.dock = system.windows.forms.dockstyle.fill;
361             this.p5.fillcolor = system.drawing.color.white;
362             this.p5.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
363             this.p5.isradius = true;
364             this.p5.isshowrect = true;
365             this.p5.isshowtips = false;
366             this.p5.location = new system.drawing.point(242, 5);
367             this.p5.margin = new system.windows.forms.padding(2, 5, 2, 5);
368             this.p5.name = "p5";
369             this.p5.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
370             this.p5.rectwidth = 1;
371             this.p5.size = new system.drawing.size(36, 30);
372             this.p5.tabindex = 5;
373             this.p5.tabstop = false;
374             this.p5.tipstext = "";
375             this.p5.btnclick += new system.eventhandler(this.page_btnclick);
376             // 
377             // p4
378             // 
379             this.p4.backcolor = system.drawing.color.white;
380             this.p4.btnbackcolor = system.drawing.color.white;
381             this.p4.btnfont = new system.drawing.font("微软雅黑", 9f);
382             this.p4.btnforecolor = system.drawing.color.gray;
383             this.p4.btntext = "4";
384             this.p4.conerradius = 5;
385             this.p4.cursor = system.windows.forms.cursors.hand;
386             this.p4.dock = system.windows.forms.dockstyle.fill;
387             this.p4.fillcolor = system.drawing.color.white;
388             this.p4.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
389             this.p4.isradius = true;
390             this.p4.isshowrect = true;
391             this.p4.isshowtips = false;
392             this.p4.location = new system.drawing.point(202, 5);
393             this.p4.margin = new system.windows.forms.padding(2, 5, 2, 5);
394             this.p4.name = "p4";
395             this.p4.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
396             this.p4.rectwidth = 1;
397             this.p4.size = new system.drawing.size(36, 30);
398             this.p4.tabindex = 4;
399             this.p4.tabstop = false;
400             this.p4.tipstext = "";
401             this.p4.btnclick += new system.eventhandler(this.page_btnclick);
402             // 
403             // p3
404             // 
405             this.p3.backcolor = system.drawing.color.white;
406             this.p3.btnbackcolor = system.drawing.color.white;
407             this.p3.btnfont = new system.drawing.font("微软雅黑", 9f);
408             this.p3.btnforecolor = system.drawing.color.gray;
409             this.p3.btntext = "3";
410             this.p3.conerradius = 5;
411             this.p3.cursor = system.windows.forms.cursors.hand;
412             this.p3.dock = system.windows.forms.dockstyle.fill;
413             this.p3.fillcolor = system.drawing.color.white;
414             this.p3.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
415             this.p3.isradius = true;
416             this.p3.isshowrect = true;
417             this.p3.isshowtips = false;
418             this.p3.location = new system.drawing.point(162, 5);
419             this.p3.margin = new system.windows.forms.padding(2, 5, 2, 5);
420             this.p3.name = "p3";
421             this.p3.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
422             this.p3.rectwidth = 1;
423             this.p3.size = new system.drawing.size(36, 30);
424             this.p3.tabindex = 3;
425             this.p3.tabstop = false;
426             this.p3.tipstext = "";
427             this.p3.btnclick += new system.eventhandler(this.page_btnclick);
428             // 
429             // p2
430             // 
431             this.p2.backcolor = system.drawing.color.white;
432             this.p2.btnbackcolor = system.drawing.color.white;
433             this.p2.btnfont = new system.drawing.font("微软雅黑", 9f);
434             this.p2.btnforecolor = system.drawing.color.gray;
435             this.p2.btntext = "2";
436             this.p2.conerradius = 5;
437             this.p2.cursor = system.windows.forms.cursors.hand;
438             this.p2.dock = system.windows.forms.dockstyle.fill;
439             this.p2.fillcolor = system.drawing.color.white;
440             this.p2.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
441             this.p2.isradius = true;
442             this.p2.isshowrect = true;
443             this.p2.isshowtips = false;
444             this.p2.location = new system.drawing.point(122, 5);
445             this.p2.margin = new system.windows.forms.padding(2, 5, 2, 5);
446             this.p2.name = "p2";
447             this.p2.rectcolor = system.drawing.color.fromargb(((int)(((byte)(223)))), ((int)(((byte)(223)))), ((int)(((byte)(223)))));
448             this.p2.rectwidth = 1;
449             this.p2.size = new system.drawing.size(36, 30);
450             this.p2.tabindex = 2;
451             this.p2.tabstop = false;
452             this.p2.tipstext = "";
453             this.p2.btnclick += new system.eventhandler(this.page_btnclick);
454             // 
455             // txtpage
456             // 
457             this.txtpage.backcolor = system.drawing.color.transparent;
458             this.txtpage.conerradius = 5;
459             this.txtpage.cursor = system.windows.forms.cursors.ibeam;
460             this.txtpage.declength = 2;
461             this.txtpage.fillcolor = system.drawing.color.empty;
462             this.txtpage.font = new system.drawing.font("微软雅黑", 15f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
463             this.txtpage.forecolor = system.drawing.color.gray;
464             this.txtpage.inputtext = "";
465             this.txtpage.inputtype = hzh_controls.textinputtype.positiveinteger;
466             this.txtpage.isfocuscolor = true;
467             this.txtpage.isradius = true;
468             this.txtpage.isshowclearbtn = false;
469             this.txtpage.isshowkeyboard = false;
470             this.txtpage.isshowrect = true;
471             this.txtpage.isshowsearchbtn = false;
472             this.txtpage.keyboardtype = hzh_controls.controls.keyboardtype.uckeyborderall_en;
473             this.txtpage.location = new system.drawing.point(524, 5);
474             this.txtpage.margin = new system.windows.forms.padding(4, 5, 4, 5);
475             this.txtpage.maxvalue = new decimal(new int[] {
476             1000000,
477             0,
478             0,
479             0});
480             this.txtpage.minvalue = new decimal(new int[] {
481             1000000,
482             0,
483             0,
484             -2147483648});
485             this.txtpage.name = "txtpage";
486             this.txtpage.padding = new system.windows.forms.padding(5);
487             this.txtpage.promptcolor = system.drawing.color.silver;
488             this.txtpage.promptfont = new system.drawing.font("微软雅黑", 13f, system.drawing.fontstyle.regular, system.drawing.graphicsunit.pixel);
489             this.txtpage.prompttext = "页码";
490             this.txtpage.rectcolor = system.drawing.color.fromargb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220)))));
491             this.txtpage.rectwidth = 1;
492             this.txtpage.regexpattern = "";
493             this.txtpage.size = new system.drawing.size(62, 30);
494             this.txtpage.tabindex = 14;
495             // 
496             // ucpagercontrol2
497             // 
498             this.autoscalemode = system.windows.forms.autoscalemode.none;
499             this.backcolor = system.drawing.color.white;
500             this.controls.add(this.tablelayoutpanel1);
501             this.name = "ucpagercontrol2";
502             this.size = new system.drawing.size(921, 41);
503             this.tablelayoutpanel1.resumelayout(false);
504             this.resumelayout(false);
505 
506         }
507 
508         #endregion
509 
510         private ucbtnext btnfirst;
511         private ucbtnext btnprevious;
512         private system.windows.forms.tablelayoutpanel tablelayoutpanel1;
513         private ucbtnext btnend;
514         private ucbtnext btnnext;
515         private ucbtnext p8;
516         private ucbtnext p7;
517         private ucbtnext p6;
518         private ucbtnext p5;
519         private ucbtnext p4;
520         private ucbtnext p3;
521         private ucbtnext p2;
522         private ucbtnext btntopage;
523         private uctextboxex txtpage;
524         private ucbtnext p9;
525         private ucbtnext p1;
526     }
527 }

用处及效果

(十二)c#Winform自定义控件-分页控件

最后的话

如果你喜欢的话,请到  点个星 星吧