1. public static class FormTransform
  2. {
  3. public static void TransformSize(Form frm, int newWidth, int newHeight)
  4. {
  5. TransformSize(frm, new Size(newWidth, newHeight));
  6. }
  7.  
  8. public static void TransformSize(Control ctl, int newWidth, int newHeight)
  9. {
  10. TransformSize(ctl, new Size(newWidth, newHeight));
  11. }
  12.  
  13. public static void TransformSize(object frm, Size newSize)
  14. {
  15. ParameterizedThreadStart threadStart = new ParameterizedThreadStart(RunTransformation);
  16. Thread transformThread = new Thread(threadStart);
  17. transformThread.Start(new object[] { frm, newSize });
  18. }
  19.  
  20. private delegate void RunTransformationDelegate(object paramaters);
  21. private static void RunTransformation(object parameters)
  22. {
  23. //Form boder = (Form)((object[])parameters)[0];
  24. Panel boder = (Panel)((object[])parameters)[];
  25. if (boder.InvokeRequired)
  26. {
  27. RunTransformationDelegate del = new RunTransformationDelegate(RunTransformation);
  28. boder.Invoke(del, parameters);
  29. }
  30. else
  31. {
  32. //动画的变量参数
  33. double FPS = 300.0;
  34. long interval = (long)(Stopwatch.Frequency / FPS);
  35. long ticks1 = ;
  36. long ticks2 = ;
  37.  
  38. //传进来的新的窗体的大小
  39. Size size = (Size)((object[])parameters)[];
  40.  
  41. int xDiff = Math.Abs(boder.Width - size.Width);
  42. int yDiff = Math.Abs(boder.Height - size.Height);
  43.  
  44. int step = ;
  45.  
  46. int xDirection = boder.Width < size.Width ? : -;
  47. int yDirection = boder.Height < size.Height ? : -;
  48.  
  49. int xStep = step * xDirection;
  50. int yStep = step * yDirection;
  51.  
  52. //要调整的窗体的宽度是否在步长之内
  53. bool widthOff = IsWidthOff(boder.Width, size.Width, xStep);
  54. //要调整的窗体的高度是否在步长之内
  55. bool heightOff = IsHeightOff(boder.Height, size.Height, yStep);
  56.  
  57. while (widthOff || heightOff)
  58. {
  59. //获取当前的时间戳
  60. ticks2 = Stopwatch.GetTimestamp();
  61. //允许调整大小仅在有足够的时间来刷新窗体的时候
  62. if (ticks2 >= ticks1 + interval)
  63. {
  64. //调整窗体的大小
  65. if (widthOff)
  66. boder.Width += xStep;
  67.  
  68. if (heightOff)
  69. boder.Height += yStep;
  70.  
  71. widthOff = IsWidthOff(boder.Width, size.Width, xStep);
  72. heightOff = IsHeightOff(boder.Height, size.Height, yStep);
  73.  
  74. //允许窗体刷新
  75. Application.DoEvents();
  76.  
  77. //保存当前的时间戳
  78. ticks1 = Stopwatch.GetTimestamp();
  79. }
  80.  
  81. Thread.Sleep();
  82. }
  83.  
  84. }
  85. }
  86.  
  87. private static bool IsWidthOff(int currentWidth, int targetWidth, int step)
  88. {
  89. //目标宽度与当前宽度是否在步长之内,如果是,返回false
  90. if (Math.Abs(currentWidth - targetWidth) <= Math.Abs(step)) return false;
  91.  
  92. return (step > && currentWidth < targetWidth) ||
  93. (step < && currentWidth > targetWidth);
  94. }
  95.  
  96. private static bool IsHeightOff(int currentHeight, int targetHeight, int step)
  97. {
  98. //目标高度与当前高度是否在步长之内,如果是,返回false
  99. if (Math.Abs(currentHeight - targetHeight) <= Math.Abs(step)) return false;
  100.  
  101. return (step > && currentHeight < targetHeight) ||
  102. (step < && currentHeight > targetHeight);
  103. }
  104. }
  1. //调用代码
  2. FormTransform.TransformSize(this, width, height);

winform左右滑动的更多相关文章

  1. 在winform中,禁止combobox随着鼠标一起滑动!

    在winform中,如果form上或者是控件上有一个combobox控件,当你选择这个控件,当你鼠标移动其他地方,滑动鼠标时,这时combobox的选择值就会随之鼠标一起变化,如果你不想让comboB ...

  2. winform实现图片的滑动效果

    使用winform实现图片的滑动效果(类似网站首页图片滑动切换效果),结果实现了,但是效果其实不是很理想.也许有更好的方法.         Timer timerSlide = null; //当前 ...

  3. winform 实现类似于TrackBar的自定义滑动条,功能更全

    功能很全,随便列几个 1.可以设置滑块的大小,边框颜色.背景色.形状等等吧 2.可以设置轨道的方向.边框颜色.背景色.阴影等等 ... 效果图: 下载链接https://download.csdn.n ...

  4. WPF 自定义BarChartControl(可左右滑动的柱状图)

    自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...

  5. winform右下角弹窗

    网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的.下面介绍两种方法. 第一步:设计窗体 第二步:实现代码 第一种方法 引用user32 声明常量 窗体Load事件 窗体FormC ...

  6. Winform实现右下角弹窗_提示信息

    网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的.下面介绍两种方法. 第一步:设计窗体 第二步:实现代码 第一种方法 引用user32 声明常量 窗体Load事件 窗体FormC ...

  7. 关于WinForm/Web如何使用缓存Cach

    原文链接:http://www.cnblogs.com/zfanlong1314/archive/2013/03/28/2986403.html Cache 的绝对到期与滑动到期 绝对到期:设置绝对过 ...

  8. WinForm实现类似QQ停靠,显示隐藏过程添加特效效果

    原文:WinForm实现类似QQ停靠,显示隐藏过程添加特效效果 这可能是个老题长谈的问题了,只是在项目中会用到这个效果,所以今天做个记录.大家见了别喷我.在项目中的需求是这样的. 打开程序,在屏幕的右 ...

  9. winform界面特效470多例

    一共470多例winform 界面特效的源码. 实例030 窗口颜色的渐变 实例说明 在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色.但是这个属性改变后整个窗体的客户区都会 ...

随机推荐

  1. HDU 1010生成树

    求起点到终点的最短权值和

  2. 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

    注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...

  3. Codeforces 1043 - A/B/C/D/E/F - (Undone)

    链接:http://codeforces.com/contest/1043 A - Elections - [水水水水题] 题意: 我和另一个人竞争选举,共有 $n$ 个人投票,每个人手上有 $k$ ...

  4. [daily]在dark theme下,启动wps的方法

    dark之后,wps的字体变成了灰白的 这样启动 env GTK2_RC_FILES=/usr/share/themes/Breeze/gtk-2.0/gtkrc /usr/bin/et -style ...

  5. Python爬虫实例(四)网站模拟登陆

    一.获取一个有登录信息的Cookie模拟登陆 下面以人人网为例,首先使用自己的账号和密码在浏览器登录,然后通过抓包拿到cookie,再将cookie放到请求之中发送请求即可,具体代码如下: # -*- ...

  6. JMeter学习-041-响应数据中文乱码解决方法

    华夏子孙,中文为母语.因而在接口测试过程中,响应数据含有中文是再也正常不过的事情.同时,初学JMeter的童鞋,经常会遇到响应数据中中文乱码的问题. 本文中提供两种方式的修正方法,仅供大家参考,谢谢. ...

  7. Navicat 远程连接 Oracle11g 数据库报错 No listener 的问题

    1.首先确认已经启动 OracleOraDb11g_home1TNSListener 服务时,仍无法连接:   2.进入计算机系统属性中查看 Oracle 服务端计算机的全名:   3.进入 Orac ...

  8. 把ResNet-L152模型的ckpt文件转化为pb文件

    import tensorflow as tf from tensorflow.python.tools import freeze_graph #os.environ['CUDA_VISIBLE_D ...

  9. linux环境如何配置repo

    (1)下载repo mkdir ~/bin       curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo  ...

  10. mysql 游标嵌套

    BEGIN -- 开始存储过程 declare my_ID varchar(32); -- 线路iddeclare my_SpecialLineName varchar(50); -- 线路名称 de ...