ApeForms | C#-WinForm窗体仿Android桌面(左右翻页)

ApeForms系列③ 扩展功能使用技巧——平滑运动实现仿Android桌面翻页

@

前言

本文将讲解如何利用ApeForms扩展方法使控件平滑运动,并以此实现一个仿Android桌面翻页的效果。
在这里插入图片描述


实现方法

引用扩展库

在项目中通过NuGet引用ApeForms库,具体步骤请见文章——《WinForm窗体UI美化库(Metro扁平风格)演示与安装》

平滑运动

使用ApeForms扩展库可以实现一行代码使控件平滑运动,调用方法如下:

控件对象.LocationGradualChange(目标位置, 移动速率);

移动速率取值为1~255之间,值越小运动越快,相反值越大越平滑缓慢。

源代码

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Demo.ApeForms.Lesson2
{
    public partial class AndroidForm : Form
    {
        private Control[] pages;
        private int pageIndex;
        private byte rate = 5;  // 翻页速率 1~20

        public AndroidForm()
        {
            InitializeComponent();
            datePicker1.Year = 2022;
            pages = new Control[] { tlpPage1, tlpPage2, tlpPage3 };
            PageTurning(0);
        }

        /// <summary>
        /// 翻页
        /// </summary>
        /// <param name="pageIndex">页码</param>
        public void PageTurning(int pageIndex)
        {
            this.pageIndex = pageIndex;
            for (int i = 0; i < pages.Length; i++)
            {
                var ctrl = pages[i];
                Point point;
                if (i == pageIndex)
                {
                    var size = Size - ctrl.Size;
                    point = new Point(size.Width/2,(size.Height - alignCenterBox1.Height) / 2);
                    ctrl.LocationGradualChange(point);
                }
                else if(i < pageIndex)
                {
                    var size = Size - ctrl.Size - alignCenterBox1.Size;
                    point = new Point(-ctrl.Width, size.Height/2);
                }
                else
                {
                    var size = Size - ctrl.Size - alignCenterBox1.Size;
                    point = new Point(Width, size.Height / 2);
                }
                ctrl.LocationGradualChange(point, rate);
            }
        }

        private void btnFunc_Click(object sender, EventArgs e)
        {
            if(sender == btnLeft)
            {
                pageIndex = pageIndex > 0 ? pageIndex - 1 : pages.Length - 1;
            }
            else if (sender == btnRight)
            {
                pageIndex++;
            }
            else
            {
                pageIndex = 0;
            }
            PageTurning(pageIndex % pages.Length);
        }
    }
}

源码下载

项目源码已上传到CSDN下载

前往下载 https://download.csdn.net/download/lgj123xj/85463277

posted @   猿长大人  阅读(1128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示