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

前提

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

GitHub:https://github.com/kwwwvagaa/NetWinformControl

码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

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

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

目录

https://www.cnblogs.com/bfyx/p/11364884.html

准备工作

当一个列表加载数据过多时,比如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 }
View Code

 

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

第一种

 添加用户控件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 }
View Code
  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 }
View Code

 

第二种

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

添加一个用户控件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 }
View Code
  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 }
View Code

用处及效果

最后的话

如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星 星吧

posted @ 2019-08-16 13:31  冰封一夏  阅读(8132)  评论(3编辑  收藏  举报
HZHControls控件库官网:https://www.hzhcontrols.cn