控制WinForm界面在屏幕的四个角落显示,具体代码中有说明:
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 = ; //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 = ; //运动到第几次
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 * / 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 == )
{
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 * / this.tickCount;
this.num++;
}
else
{
this._form.Location = this.locationPoint;
this._form.Opacity = ;
this.num = ;
this.timer.Stop();
}
}
} /// <summary>
/// 开始显示动态窗体
/// </summary>
public void Start()
{
this.timer.Enabled = true;
this.timer.Start();
this._form.Opacity = ;
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 < )
{
this.locationPoint.X = ;
} if (this.locationPoint.Y < )
{
this.locationPoint.Y = ;
} 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 / ;
frmCentre.Y = this.locationPoint.Y + this._form.Height / ;
return frmCentre;
} /// <summary>
/// 屏幕中心点
/// </summary>
/// <returns></returns>
private Point ScreenCentre()
{
Point screenCentre = new Point();
screenCentre.X = this.screenWidth / ;
screenCentre.Y = this.screenHeight / ;
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
}
}
参考:屏幕、任务栏 工作域大小
当前的屏幕除任务栏外的工作域大小
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);