控制WinForm界面在屏幕的四个角落显示,具体代码中有说明:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Tooltip { /// <summary> /// 弹出自方向 右上、右下、左上、左下 /// </summary> internal enum PopUp { LeftUp, //左上 LeftDown, //左下 RightUp, //右上 RightDown //右下 } /// <summary> /// 显示窗体 /// </summary> public class ShowForm { #region 字段 属性 private int screenWidth; //除任务栏外的屏幕的宽 private int screenHeight; //除任务栏外的屏幕的高 private Timer timer = new Timer(); //计时器 private Form _form; /// <summary> /// 显示的窗体 /// </summary> public Form TheForm { set { this._form = value; SetLocation(); } get { return this._form; } } private System.Drawing.Point locationPoint; /// <summary> /// 窗体显示位置 /// </summary> public System.Drawing.Point LocationPoint { set { this.locationPoint = value; LimitShowArea(); } get { return this.locationPoint; } } private int time; /// <summary> /// 设置弹出窗体过程的整个时间 /// </summary> public int Time { set { this.time = value; } get { return this.time; } } #endregion #region 构造函数 /// <summary> /// 构造函数 /// </summary> public ShowForm() { //this._form = form; screenWidth = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; screenHeight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; this.time = 3; //this.timer.Interval = 100; this.timer.Tick += new EventHandler(timer_Tick); this.timer.Enabled = false; } #endregion #region 动态化窗体 开始 结束 #region 窗体动态化参数 private int x_distance; //运动时在X轴上的距离 private int y_distance; //运动时在Y轴上的距离 private int tickCount; //总运动次数 private int x_step; //运动时在Y轴上的步长 private int y_step; //运动时在Y轴上的步长 private int num = 0; //运动到第几次 private Point reachPoint = new Point(); //运动到的具体位置 #endregion /// <summary> /// 设置窗体动态化参数 /// </summary> private void SetFormDynamicParms() { x_distance = this.locationPoint.X - this.screenWidth; y_distance = this.locationPoint.Y - this.screenHeight; tickCount = this.time * 1000 / this.timer.Interval; PopUp popUpDirection = this.JudgeDirection(); switch (popUpDirection) { case PopUp.LeftUp: x_distance = this.locationPoint.X + this._form.Width; //x_distance = this.locationPoint.X; y_distance = this.locationPoint.Y + this._form.Height; //y_distance = this.locationPoint.Y break; case PopUp.LeftDown: x_distance = this.locationPoint.X + this._form.Width; //x_distance = this.locationPoint.X; y_distance = this.locationPoint.Y - this.screenHeight; break; case PopUp.RightUp: x_distance = this.locationPoint.X - this.screenWidth; y_distance = this.locationPoint.Y + this._form.Height; //y_distance = this.locationPoint.Y; break; default: break; } x_step = x_distance / tickCount; y_step = y_distance / tickCount; } /// <summary> /// 计时器间隔执行函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer_Tick(object sender, EventArgs e) { if (this.num == 0) { SetFormDynamicParms(); num++; } else { this.reachPoint.X = this.locationPoint.X - x_distance + x_step * num; this.reachPoint.Y = this.locationPoint.Y - y_distance + y_step * num; if (this.num < this.tickCount) { this._form.Location = this.reachPoint; this._form.Opacity = this.num * 100 / this.tickCount; this.num++; } else { this._form.Location = this.locationPoint; this._form.Opacity = 100; this.num = 0; this.timer.Stop(); } } } /// <summary> /// 开始显示动态窗体 /// </summary> public void Start() { this.timer.Enabled = true; this.timer.Start(); this._form.Opacity = 0; this._form.Show(); } /// <summary> /// 关闭显示的窗体 /// </summary> public void Close() { this.timer.Stop(); this.timer.Enabled = false; this._form.Close(); } #endregion #region 默认显示位置 private void SetLocation() { Point lct = new Point(); lct.X = screenWidth - this.TheForm.Width; lct.Y = screenHeight - this.TheForm.Height; this.LocationPoint = lct; } #endregion #region 限制弹框的显示区域 private void LimitShowArea() { if (this.locationPoint.X < 0 ) { this.locationPoint.X = 0; } if (this.locationPoint.Y < 0) { this.locationPoint.Y = 0; } int maxX = this.screenWidth - this._form.Width; //Form 不溢出 X轴最大值 if (this.locationPoint.X > maxX) { this.locationPoint.X = maxX; } int maxY = this.screenHeight - this._form.Height; //Form 不溢出 Y轴最大值 if (this.locationPoint.Y > maxY) { this.locationPoint.Y = maxY; } } #endregion #region 窗体显示 右上、右下、左上、左下 /// <summary> /// 窗体中心点 /// </summary> /// <returns></returns> private Point FormCentre() { Point frmCentre = new Point(); frmCentre.X = this.locationPoint.X + this._form.Width / 2; frmCentre.Y = this.locationPoint.Y + this._form.Height / 2; return frmCentre; } /// <summary> /// 屏幕中心点 /// </summary> /// <returns></returns> private Point ScreenCentre() { Point screenCentre = new Point(); screenCentre.X = this.screenWidth / 2; screenCentre.Y = this.screenHeight / 2; return screenCentre; } /// <summary> /// 判断窗体显示自的方向 /// </summary> /// <returns></returns> private PopUp JudgeDirection() { PopUp popup = PopUp.RightDown; Point frmCentre = FormCentre(); Point screenCentre = ScreenCentre(); if (frmCentre.X < screenCentre.X) { if (frmCentre.Y < screenCentre.Y) { popup = PopUp.LeftUp; } else { popup = PopUp.LeftDown; } } else { if (frmCentre.Y < screenCentre.Y) { popup = PopUp.RightUp; } else { popup = PopUp.RightDown; } } return popup; } #endregion } }
参考:屏幕、任务栏 工作域大小
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
当前的屏幕除任务栏外的工作域大小 this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; 当前的屏幕包括任务栏的工作域大小 this.Width=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; this.Height=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; 任务栏大小 this.Width=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width-System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; this.Height=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height-System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; winform实现全屏显示 WinForm: this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.TopMost = true; winform获取屏幕区域 Rectangle ScreenArea = System.Windows.Forms.Screen.GetWorkingArea(this);