WinForm自带的窗体大小发生改变的时候,当内存不够的时候,会出现界面停滞的现象,会出现许多的条条纹纹,给人很不好的感觉,这里提供一个WinForm窗体缩放时会有一个渐变的动画效果给大家。

思路是这样的,在特定的时间段内,如果缩放的宽度的距离不在步骤之内,则逐渐逐渐增加宽度,以达到动画的效果。

主要的代码如下:

代码

private static void RunTransformation(object parameters)
        {
            Form frm = (Form)((object[])parameters)[0];
            if (frm.InvokeRequired)
            {
                RunTransformationDelegate del = new RunTransformationDelegate(RunTransformation);
                frm.Invoke(del, parameters);
            }
            else
            {
                //动画的变量参数
                double FPS = 300.0;
                long interval = (long)(Stopwatch.Frequency / FPS);
                long ticks1 = 0;
                long ticks2 = 0;

//传进来的新的窗体的大小
                Size size = (Size)((object[])parameters)[1];

int xDiff = Math.Abs(frm.Width - size.Width);
                int yDiff = Math.Abs(frm.Height - size.Height);

int step = 10;

int xDirection = frm.Width < size.Width ? 1 : -1;
                int yDirection = frm.Height < size.Height ? 1 : -1;

int xStep = step * xDirection;
                int yStep = step * yDirection;

//要调整的窗体的宽度是否在步长之内
                bool widthOff = IsWidthOff(frm.Width, size.Width, xStep);
                //要调整的窗体的高度是否在步长之内
                bool heightOff = IsHeightOff(frm.Height, size.Height, yStep);

while (widthOff || heightOff)
                {
                    //获取当前的时间戳
                    ticks2 = Stopwatch.GetTimestamp();
                    //允许调整大小仅在有足够的时间来刷新窗体的时候
                    if (ticks2 >= ticks1 + interval) 
                    {
                        //调整窗体的大小
                        if (widthOff)
                            frm.Width += xStep;

if (heightOff)
                            frm.Height += yStep;

widthOff = IsWidthOff(frm.Width, size.Width, xStep);
                        heightOff = IsHeightOff(frm.Height, size.Height, yStep);

//允许窗体刷新
                        Application.DoEvents();

//保存当前的时间戳
                        ticks1 = Stopwatch.GetTimestamp();
                    }

Thread.Sleep(1);
                }

}
        }

目标宽度与当前宽度是否在步长之内

代码

private static bool IsWidthOff(int currentWidth, int targetWidth, int step)
        {
            //目标宽度与当前宽度是否在步长之内,如果是,返回false
            if (Math.Abs(currentWidth - targetWidth) <= Math.Abs(step)) return false;

return (step > 0 && currentWidth < targetWidth) ||
                   (step < 0 && currentWidth > targetWidth); 
        }

源代码下载 :

转载于:https://www.cnblogs.com/alexis/archive/2011/01/18/1938695.html

WinForm窗体缩放动画相关推荐

  1. winform窗体打开动画效果

    一.winform窗体打开动画效果 ①书写窗体动画类 class animation{/// <summary>/// 函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果.有两种类型的动 ...

  2. C# winform 窗体缩放问题处理

    一.问题: 本身窗体在设计器显示没有问题,但运行时窗口却被缩放失真: 二.解决方法: 修改项目的配置文件,使项目运行时自动检测屏幕分辨率,在高分辨率屏幕禁用系统缩放,在项目应用程序清单文件里有对禁用高 ...

  3. 使用C#实现WinForm窗体的动画效果

    [转]http://www.cnblogs.com/xvqm00/archive/2009/02/16/1391313.html using System.Runtime.InteropService ...

  4. Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变

    场景 在新建一个Winform窗体后,拖拽控件设置其布局如下 如果只是单纯的这么设计,我们在运行后,如果对窗口进行缩放就会导致如下 所以我们需要在设计页面布局时对控件进行定位设置. 注: 博客主页: ...

  5. c# groupbox大小_【已解决】C#中使得控件随着WinForm窗体的大小改变而自动变化

    [问题] 想要使得一个C#中的一个窗体中的控件,DataGridView,自动随着WinForm窗体变化而变化,即: 中的显示数据的灰色部分, 另外还有上面那个"2.actions" ...

  6. 视频教程-C#Winform窗体与界面设计-C#

    C#Winform窗体与界面设计 二十多年的企业管理软件开发经历,熟知管理软件的整个开发流程,熟练掌握VFP语言,掌握VB语言,了解JAVA.asp.net.CSS.HTML/HTML5等语言,使用C ...

  7. C# winform窗体技术点一

    一:文件复制 粘贴 很多窗体都会有导入功能,一般都会导入模板下载,所以这个时候需要使用到复制粘贴 private void labelX15_Click(object sender, EventArg ...

  8. Android Property Animation属性动画:scale缩放动画(4)

     Android Property Animation属性动画:scale缩放动画(4) 和之前我写的附录文章1,2,3相似,本文将接着使用Android Property Animation属性 ...

  9. 【Animations】使用缩放动画放大视图(7)

    原文 概要 本课程演示如何执行触摸缩放动画,这对诸如照片库等应用程序可以将视图从缩略图动画化为充满屏幕的全尺寸图像. 以下是触摸缩放动画看起来像展开图像缩略图以填充屏幕: 视频地址:https://d ...

最新文章

  1. 香港计算机本科专业,中国香港计算机本科专业包含哪些呢?
  2. 多线程程序 怎样查看每个线程的cpu占用
  3. spark端口实验总结:
  4. Spark 1.3 新特性 :176个贡献者,1000+ patches
  5. VTK:几何对象之Quad
  6. mysql服务器_windows mysql服务器
  7. k均值的损失函数_一种基于均值不等式的Listwise损失函数
  8. simulink方框_4.4设计Simulink框图的界面
  9. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API
  10. c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...
  11. 【kafka】kafka获取消费组异常 EOFException: null KeeperErrorCode
  12. 新员工入职表_【干货】新员工入职全方案:180天详细培训计划
  13. TensorFlow on Windows: “Couldn't open CUDA library cudnn64_5.dll”
  14. rust木炭有用吗_如何看待 Rust 这门语言?
  15. 使用js进行智慧树刷课
  16. 【工具】中国菜刀 官方原版下载 官网下载链接
  17. mtk最新刷机平台SP_Flash_Tool_v6.2208_Win
  18. 北京大学计算机辅助翻译招生计划,北京大学计算机辅助翻译硕士复习规划
  19. python天眼查 的融资_python怎么爬取天眼查工商基本信息?
  20. @Responsebody utf8 Chinese gibberish

热门文章

  1. iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
  2. 医疗器械软件安全性级别判定
  3. java在src创建entity文件_java自动生成entity文件
  4. 鸿蒙比不了IOS,比苹果的iOS14还流畅,华为鸿蒙2.0可以啊!
  5. MySQL 笔记4 -- 数据完整性
  6. python3精要(48)-os命令
  7. 【深度学习】preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
  8. 【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度...
  9. 【图神经网络】基于GNN的不同变种及其应用
  10. 【NLP笔记】文本生成?还不快上知识库