C# Winform实现自定义分页控件

 更新时间:2023年07月19日 08:57:19   作者:Csharp 小记  
一些第三方的分页控件要么就是界面不够美观大方,要么就是使用起来感觉很麻烦,所以本文就为大家介绍一下如何利用Winform自定义分页控件,需要的可以参考一下

前言

其实,也用过一些第三方的分页控件;都是感觉很奇怪,要么就是界面不够美观大方,要么就是使用起来感觉很麻烦。想想觉得这玩意应该挺简单的啊,所以就决定还是写一个适合自己的吧。

一向简洁的我,终究只会造就一个简单的结果。所以注定这个控件足够简单。

实现方法

1.新建一个用户控件,在上面拖几个Label和TextBox控件,效果如下:

2.在代码页面分别定义以下属性

        public Action<int> GetPageData { get; set; }
        private Color _FontColor;
        [Browsable(true), Description("设置字体颜色")]
        public Color FontColor
        {
            get => _FontColor; set
            {
                lb_down.ForeColor = lb_end.ForeColor = lb_go.ForeColor = lb_home.ForeColor = lb_page.ForeColor = lb_up.ForeColor = value;
            }
        }
        private int _DataCount;
        [Description("数据总数量")]
        public int DataCount
        {
            get => _DataCount;
            set
            {
                _DataCount = value;
                lb_page.Text = PageIndex + "/" + PageTotal;
            }
        }
        private int _PageSize;
        [Description("页显示数量")]
        public int PageSize
        {
            get
            {
                return _PageSize <= 0 ? 50 : _PageSize;
            }
            set
            {
                _PageSize = value;
                lb_page.Text = PageIndex + "/" + PageTotal;
            }
        }
        private int _PageTotal;
        [Description("总页数")]
        public int PageTotal
        {
            get
            {
                if (DataCount % PageSize == 0)
                {
                    _PageTotal = DataCount / PageSize;
                }
                else
                {
                    _PageTotal = DataCount / PageSize + 1;
                }
                return _PageTotal <= 0 ? 1 : _PageTotal;
            }
        }
​​​​​​​        private int _PageIndex;
        [Description("当前页数")]
        public int PageIndex
        {
            get
            {
                return _PageIndex <= 0 ? 1 : _PageIndex;
            }
            private set
            {
                _PageIndex = value;
                if (_PageIndex <= 0)
                {
                    _PageIndex = 1;
                }
                if (_PageIndex > PageTotal)
                {
                    _PageIndex = PageTotal;
                }
                if (GetPageData != null)
                {
                    GetPageData(_PageIndex);
                    lb_page.Text = _PageIndex + "/" + PageTotal;
                }
            }
        }

3.针对每个Label对应的属性做点击处理

private void lb_home_Click(object sender, EventArgs e)
        {
            PageIndex = 1;
        }
        private void lb_up_Click(object sender, EventArgs e)
        {
            PageIndex--;
        }
        private void lb_down_Click(object sender, EventArgs e)
        {
            PageIndex++;
        }
        private void lb_end_Click(object sender, EventArgs e)
        {
            PageIndex = PageTotal;
        }
        private void lb_go_Click(object sender, EventArgs e)
        {
            if (int.TryParse(txt_num.Text, out int result))
            {
                PageIndex = result;
            }
        }
​​​​​​​        private void txt_num_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(e.KeyChar == '\b' || (e.KeyChar >= '0' && e.KeyChar <= '9')))
            {
                e.Handled = true;
            }
        }

4.好了,没了,控件结束了,简单吧。

5.再来看下使用方式,首先就是在获取到数据之后,把DataCount属性赋值数据的总数量

 private async Task GetPageData()
 {
     //...获取服务端数据的代码
     BindList.SetData(result.Data);
     pageEx1.DataCount = result.DataCount;
}

6.然后就是做换页的处理了,也就是使用GetPageData获取到页码之后,重新进行数据获取即可

 pageEx1.GetPageData = async s =>
            {
                PageIndex = s;
                await GetPageData();
            };

7.控件简单,功能满足,使用方便。这不是理想中的控件么?

实现效果

到此这篇关于C# Winform实现自定义分页控件的文章就介绍到这了,更多相关C# Winform分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C#如何加密解密RAR文件

    详解C#如何加密解密RAR文件

    这篇文章主要为大家详细介绍了C#如何实现加密解密RAR文件的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C#9.0推出的4个新特性介绍

    C#9.0推出的4个新特性介绍

    这篇文章介绍了C#9.0推出的4个新特性,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#滚动字幕的实现方法

    C#滚动字幕的实现方法

    这篇文章主要介绍了C#滚动字幕的实现方法,主要讲述了Graphics.DrawString函数的应用方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • c#(Socket)异步套接字代码示例

    c#(Socket)异步套接字代码示例

    c#(Socket)异步套接字代码示例...
    2007-03-03
  • C# 中的IComparable和IComparer的使用及区别

    C# 中的IComparable和IComparer的使用及区别

    这篇文章主要介绍了C# 中的IComparable和IComparer的使用及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • C#中多种高效定时器方法的使用详解

    C#中多种高效定时器方法的使用详解

    本文主要介绍了C#中多种高效定时器方法的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • WPF中窗体最大化问题的解决方法

    WPF中窗体最大化问题的解决方法

    这篇文章主要给大家介绍了关于WPF中窗体最大化问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用wpf具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 浅谈c# 浮点数计算

    浅谈c# 浮点数计算

    本文通过具体的示例给大家演示了下C#中浮点数运算所遇到的问题及解决方法,有需要的小伙伴可以参考下
    2017-09-09
  • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    这篇文章主要介绍了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法,以实例形式详细分析了WebClient模拟POST与GET登陆与浏览的过程,对于C#项目开发来说具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 编辑IL文件 修改DLL文件的方法

    编辑IL文件 修改DLL文件的方法

    下面小编就为大家带来一篇编辑IL文件 修改DLL文件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论