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

发布时间 2023-08-06 17:29:59作者: lzhdim

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

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

  1、 项目目录;

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

      

  2、 代码介绍;

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

   

 1 /// <summary>
 2     /// 显示隐藏窗体状态操作类
 3     /// 
 4     /// 窗体的状态都通过此API进行处理
 5     /// </summary>
 6     internal static class ShowWindowHelper
 7     {
 8         /// <summary>
 9         /// 设置窗体状态
10         /// </summary>
11         /// <param name="form">要设置的窗体</param>
12         /// <param name="windowState">窗体状态</param>
13         internal static void ShowWindow(Form form, ShowWindowState windowState)
14         {
15             switch (windowState)
16             {
17                 case ShowWindowState.Show:
18                     form.Visible = true;
19                     form.WindowState = System.Windows.Forms.FormWindowState.Normal;
20                     form.ShowInTaskbar = true;
21                     break;
22                 case ShowWindowState.Hide:
23                     //这里两个Visible是为了关闭时的动画效果
24                     form.Visible = false;
25                     form.WindowState = System.Windows.Forms.FormWindowState.Minimized;
26                     form.ShowInTaskbar = false;
27                     form.Visible = false;
28                     break;
29                 case ShowWindowState.Min:
30                     form.Visible = true;
31                     form.WindowState = System.Windows.Forms.FormWindowState.Minimized;
32                     break;
33                 case ShowWindowState.Max:
34                     form.Visible = true;
35                     form.WindowState = System.Windows.Forms.FormWindowState.Maximized;
36                     break;
37                 case ShowWindowState.DirectShow:
38                     form.Show();
39                     break;
40                 case ShowWindowState.DirectHide:
41                     form.Hide();
42                     break;
43             }
44         }
45     }

 

  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#的窗体隐藏到托盘图标中的动画效果,搭配上次的无边框窗体的效果,更好的能够对窗体的效果进行显示。提供了源码下载及例子,能够直接进行代码复用即可,希望对同样问题的读者能够解决该问题。