C# 实现winform自动悬浮

winform自动悬浮,主要代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 
  9 namespace SupremeWindowsForms
 10 {
 11     public partial class Form : System.Windows.Forms.Form
 12     {
 13         #region Fields and Properties
 14         /// <summary>
 15         /// 锚定位置
 16         /// </summary>
 17         internal AnchorStyles StopAanhor = AnchorStyles.None;
 18 
 19         /// <summary>
 20         /// 计时器
 21         /// </summary>
 22         public Timer TimerAnchor { get; set; }
 23 
 24         #endregion
 25 
 26         #region Methods
 27         public Form()
 28         {
 29             InitializeComponent();
 30         }
 31 
 32         /// <summary>
 33         /// 控制窗体隐藏与复现
 34         /// </summary>
 35         /// <param name="sender"></param>
 36         /// <param name="e"></param>
 37         private void Time_Tick(object sender, EventArgs e)
 38         {
 39             if (this.Bounds.Contains(Cursor.Position))
 40             {
 41                 switch (this.StopAanhor)
 42                 {
 43                     case AnchorStyles.Top:
 44                         //窗体在最上方隐藏时,鼠标接触自动出现
 45                         this.Location = new Point(this.Location.X, 0);
 46                         break;
 47                     //窗体在最左方隐藏时,鼠标接触自动出现
 48                     case AnchorStyles.Left:
 49                         this.Location = new Point(0, this.Location.Y);
 50                         break;
 51                     //窗体在最右方隐藏时,鼠标接触自动出现
 52                     case AnchorStyles.Right:
 53                         this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - this.Width, this.Location.Y);
 54                         break;
 55                 }
 56             }
 57             else
 58             {
 59                 //窗体隐藏时在靠近边界的一侧边会出现2像素原因:感应鼠标,同时2像素不会影响用户视线
 60                 switch (this.StopAanhor)
 61                 {
 62                     //窗体在顶部时时,隐藏在顶部,底部边界出现2像素
 63                     case AnchorStyles.Top:
 64                         this.Location = new Point(this.Location.X, (this.Height - 2) * (-1));
 65                         break;
 66                     //窗体在最左边时时,隐藏在左边,右边边界出现2像素
 67                     case AnchorStyles.Left:
 68                         this.Location = new Point((-1) * (this.Width - 2), this.Location.Y);
 69                         break;
 70                     //窗体在最右边时时,隐藏在右边,左边边界出现2像素
 71                     case AnchorStyles.Right:
 72                         this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 2, this.Location.Y);
 73                         break;
 74                 }
 75             }
 76         }
 77 
 78         /// <summary>
 79         /// 设置窗体位置的类型
 80         /// </summary>
 81         private void SetAnchor()
 82         {
 83             if (this.Top <= 0)
 84             {
 85                 StopAanhor = AnchorStyles.Top;
 86             }
 87             else if (this.Left <= 0)
 88             {
 89                 StopAanhor = AnchorStyles.Left;
 90             }
 91             else if (this.Left >= Screen.PrimaryScreen.Bounds.Width - this.Width)
 92             {
 93                 StopAanhor = AnchorStyles.Right;
 94             }
 95             else
 96             {
 97                 StopAanhor = AnchorStyles.None;
 98             }
 99         }
100         #endregion
101 
102         #region Events
103         private void Form_LocationChanged(object sender, EventArgs e)
104         {
105             SetAnchor();
106         }
107 
108         private void Form_Load(object sender, EventArgs e)
109         {
110             TimerAnchor = new Timer { Interval = 100 };
111             TimerAnchor.Tick += Time_Tick;
112             //timer1.Tick += Timer1_Tick;
113             TimerAnchor.Start();
114         }
115         #endregion
116    }
117 }
原文地址:https://www.cnblogs.com/1175429393wljblog/p/12119315.html