使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章

这篇具有很好参考价值的文章主要介绍了使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  今天继续研究C#的WinForm的显示动画效果。

  上次我们实现了无边框窗体的显示动画效果(见博文:基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 ),这次介绍的是未在任务栏托盘中窗体的显示隐藏动画效果的实现代码。

  1、 项目目录;

  下面是项目目录,由基本的窗体和操作类组成。

      使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章,c#,开源,开发语言

  2、 代码介绍;

  代码比较简单,直接将窗体的最小化、最大化效果加入进去即可。

  1 namespace Lzhdim.Helper
  2 {
  3     using System.Runtime.InteropServices;
  4     using System;
  5     using System.Windows.Forms;
  6 
  7 
  8     /// <summary>
  9     /// 窗体状态
 10     /// </summary>
 11     internal enum ShowWindowState
 12     {
 13         /// <summary>
 14         /// 显示窗体
 15         /// </summary>
 16         Show,
 17         /// <summary>
 18         /// 隐藏窗体
 19         /// </summary>
 20         Hide,
 21         /// <summary>
 22         /// 最小化窗体
 23         /// </summary>
 24         Min,
 25         /// <summary>
 26         /// 最大化窗体
 27         /// </summary>
 28         Max,
 29         /// <summary>
 30         /// 直接调用窗体的显示
 31         /// </summary>
 32         DirectShow,
 33         /// <summary>
 34         /// 直接调用窗体的隐藏
 35         /// </summary>
 36         DirectHide,
 37         /// <summary>
 38         /// 窗体有运行实例时的显示
 39         /// </summary>
 40         RunningShow
 41     }
 42 
 43     /// <summary>
 44     /// 显示隐藏窗体状态操作类
 45     /// 
 46     /// 窗体的状态都通过此API进行处理
 47     /// </summary>
 48     internal static class ShowWindowHelper
 49     {
 50         [DllImport("User32.dll")]
 51         private static extern bool SetForegroundWindow(IntPtr hWnd);
 52         [DllImport("User32.dll")]
 53         private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
 54 
 55         //API 常數定義
 56 
 57         private const int SW_HIDE = 0;
 58         private const int SW_NORMAL = 1;
 59         private const int SW_MAXIMIZE = 3;
 60         private const int SW_SHOWNOACTIVATE = 4;
 61         private const int SW_SHOW = 5;
 62         private const int SW_MINIMIZE = 6;
 63         private const int SW_RESTORE = 9;
 64         private const int SW_SHOWDEFAULT = 10;
 65 
 66         /// <summary>
 67         /// 设置窗体状态
 68         /// </summary>
 69         /// <param name="form">要设置的窗体</param>
 70         /// <param name="windowState">窗体状态</param>
 71         internal static void ShowWindow(Form form, ShowWindowState windowState)
 72         {
 73             switch (windowState)
 74             {
 75                 case ShowWindowState.Show:
 76                     form.Visible = true;
 77                     form.WindowState = System.Windows.Forms.FormWindowState.Normal;
 78                     form.ShowInTaskbar = true;
 79                     break;
 80                 case ShowWindowState.Hide:
 81                     //这里两个Visible是为了关闭时的动画效果
 82                     form.Visible = false;
 83                     form.WindowState = System.Windows.Forms.FormWindowState.Minimized;
 84                     form.ShowInTaskbar = false;
 85                     form.Visible = false;
 86                     break;
 87                 case ShowWindowState.Min:
 88                     form.Visible = true;
 89                     form.WindowState = System.Windows.Forms.FormWindowState.Minimized;
 90                     break;
 91                 case ShowWindowState.Max:
 92                     form.Visible = true;
 93                     form.WindowState = System.Windows.Forms.FormWindowState.Maximized;
 94                     break;
 95                 case ShowWindowState.DirectShow:
 96                     form.Show();
 97                     break;
 98                 case ShowWindowState.DirectHide:
 99                     form.Hide();
100                     break;
101                 case ShowWindowState.RunningShow:
102                     //保存窗体现在的状态
103                     FormWindowState formWindowState = form.WindowState;
104                     bool visible = form.Visible;
105 
106                     //下面显示窗体
107                     form.Visible = true;
108                     form.ShowInTaskbar = true;
109 
110                     if (visible)
111                     {
112                         //如果在状态栏显示状态,则直接还原
113                         switch (formWindowState)
114                         {
115                             case FormWindowState.Minimized:
116                                 //如果是最小化状态,则还原原来的状态,比如正常或者最大化
117                                 ShowWindowAsync(form.Handle, SW_RESTORE);
118                                 break;
119                         }
120                     }
121                     else
122                     {
123                         //如果是隐藏状态
124                         switch(formWindowState)
125                         {
126                             case FormWindowState.Maximized:
127                                 //原来是最大化的就最大化显示
128                                 ShowWindowAsync(form.Handle, SW_MAXIMIZE);
129                                 break;
130                             case FormWindowState.Minimized:
131                             case FormWindowState.Normal:
132                                 //如果是正常或者最小化则正常状态显示
133                                 ShowWindowAsync(form.Handle, SW_NORMAL);
134                                 break;
135                         }
136                     }
137                     //最后将窗体置于最前显示
138                     SetForegroundWindow(form.Handle);
139 
140                     break;
141             }
142         }
143     }
144 }
   3、 运行界面;

  因为没录制GIF,所以不提供界面了。

  4、 使用方法;

  直接将操作类放到项目里面,然后调用静态类方法即可。

 1 /// <summary>
 2         /// 隐藏窗体按钮事件
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void btnHide_Click(object sender, EventArgs e)
 7         {
 8             ShowWindowHelper.ShowWindow(this, ShowWindowState.Hide);
 9         }
10         
11         /// <summary>
12         /// 图标单击事件
13         /// </summary>
14         /// <param name="sender"></param>
15         /// <param name="e"></param>
16         private void NIShowWindow_MouseClick(object sender, MouseEventArgs e)
17         {
18             if(e.Button == MouseButtons.Left)
19             {
20                 ShowWindowHelper.ShowWindow(this, ShowWindowState.Show);
21             }
22         }
23         /// <summary>
24         /// 图标双击事件
25         /// </summary>
26         /// <param name="sender"></param>
27         /// <param name="e"></param>
28         private void NIShowWindow_MouseDoubleClick(object sender, MouseEventArgs e)
29         {
30             if (e.Button == MouseButtons.Left)
31             {
32                 //这里调用Hide程序会退出,所以直接调默认的Hide函数
33                 ShowWindowHelper.ShowWindow(this, ShowWindowState.DirectHide);
34             }
35         }

  5、 源码下载;

  这里提供源码例子下载:

       https://download.csdn.net/download/lzhdim/88171194

  上面是笔者整理的关于C#的窗体隐藏到托盘图标中的动画效果,搭配上次的无边框窗体的效果,更好的能够对窗体的效果进行显示。提供了源码下载及例子,能够直接进行代码复用即可,希望对同样问题的读者能够解决该问题。文章来源地址https://www.toymoban.com/news/detail-632112.html

到了这里,关于使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#异形窗体遮罩效果

     c#异形窗体遮罩效果,移动,关闭,最大化,最小化,还原操作 工程代码: https://download.csdn.net/download/txwtech/88746025 https://download.csdn.net/download/txwtech/88746025

    2024年01月17日
    浏览(34)
  • Android View的动画效果,上移展示和下移隐藏

    原文:Android View的动画效果,上移展示和下移隐藏-Stars-One的杂货小窝 项目里的一个小需求(实际是要和手势操作一起,上滑和下拉触发此动画效果),记录一下 PS: 本篇先记录下动画效果,下篇再将如何监听滑动手势 实际通过View的translationY的属性来实现 PS: withEndAction 方法实际也是设

    2024年03月22日
    浏览(49)
  • C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章

    今天继续研究C#的WinForm的实例显示效果。 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章  )。这就有一个问题,程序已经打开了,这时候再次运行该应用程序,我们的方案是将该应用的主窗体显示出

    2024年02月14日
    浏览(35)
  • 实现WPF客户端程序窗体大小随着任务栏的显示与隐藏自动调整为全屏

    要实现WPF客户端程序窗体大小随着任务栏的显示与隐藏自动调整为全屏,可以使用以下步骤: 在窗体的代码文件中,订阅 SystemParameters.StaticPropertyChanged 事件,该事件会在任务栏显示或隐藏时触发。 这样,当任务栏显示或隐藏时,窗体的高度将自动调整为全屏或屏幕可用工作

    2024年02月13日
    浏览(38)
  • C# 添加现有的窗体的时候,为何窗体的控件不显示了?

    有的项目中一些功能是可以复用的,将原始项目中的窗体文件添加到新项目时,发现有一些问题。添加完之后,打开的窗体发现没有显示任何控件,窗体的大小还变小了? 将Form1.cs Form1.resx Form1.Designer 三个文件直接复制到新项目的目录下,然后直接在新项目上选择添加现有项

    2024年02月10日
    浏览(45)
  • C# winform窗体全屏显示设置

    窗体全屏显示,并覆盖桌面任务栏。 全屏显示后,如果拖拽标题栏,会使窗体全屏失效(如果禁用了最大话按钮),为了解决这样的问题,需要设置“标题栏移动”属性:

    2024年02月16日
    浏览(62)
  • vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

    一、实现效果 使用echarts实现省市地图绘制,你也可以绘制全国地图。 根据数据在地图显示柱状图,根据经纬度实现定位。 根据数据显示数据,涟漪动态效果。 当然你也可以根据你自己的需求,增删效果哦。 二、实现方法 1、安装echarts插件 2、获取省市json数据 https://datav.

    2024年02月03日
    浏览(44)
  • 微信小程序做登录密码显示隐藏效果

     在编辑器和苹果手机上面显示就是正常的大小,在安卓手机上面黑点就非常大,需要单独调   安卓手机显示比较大  wxml 注意:在html中的input是通过切换type的属性值来实现隐藏显示的 在微信小程序的input里面type没有password属性 是通过password属性的true或者false来设置是否为密

    2024年02月12日
    浏览(59)
  • 微信小程序做登录密码显示隐藏效果 并解决安卓手机端隐藏密码时小黑点显示过大问题

     在编辑器和苹果手机上面显示就是正常的大小,在安卓手机上面黑点就非常大,需要单独调   安卓手机显示比较大  wxml 注意:在html中的input是通过切换type的属性值来实现隐藏显示的 在微信小程序的input里面type没有password属性 是通过password属性的true或者false来设置是否为密

    2024年02月15日
    浏览(103)
  • C#实现3D模型的动画效果和交互设计

    介绍3D模型动画效果和交互功能的概念和作用 介绍3D模型动画效果和交互功能的概念和作用: 3D模型动画效果是指通过对3D模型进行动态的变化和运动,使其呈现出生动的效果,增强用户的视觉体验。交互功能则是指用户可以通过操作3D模型来实现一些特定的功能,例如旋转、

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包