C#:控制WinForm界面的显示
控制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);
C#:控制WinForm界面的显示的更多相关文章
- Unity在UI界面上显示3D模型/物体,控制模型旋转
Unity3D物体在UI界面的显示 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- 循序渐进开发WinForm项目(4)--Winform界面模块的集成使用
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- winform界面特效470多例
一共470多例winform 界面特效的源码. 实例030 窗口颜色的渐变 实例说明 在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色.但是这个属性改变后整个窗体的客户区都会 ...
- Web界面和Winform界面生成,代码生成工具
在上面一篇随笔<代码生成工具之界面快速生成>介绍了代码生成工具Database2Sharp的界面生成操作,其中介绍了Web界面(包括列表界面.内容显示.内容编辑界面的生成,另外还介绍了Wi ...
- C#470多例winform 界面特效的源码
一共470多例winform 界面特效的源码. 窗体与界面设计... 9 实例001 带历史信息的菜单 10 实例002 菜单动态合并 12 实例003 像开始菜单一样漂亮的菜单.. ...
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...
- 总结开发中基于DevExpress的Winform界面效果
DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...
- NanUI for Winform发布,让Winform界面设计拥有无限可能
如今,尽管WPF.UWP大行其道,大有把Winform打残干废的趋势.但是还是有那么一波顽固不化的老家伙们固守着Winform,其中就包括我. 好吧,既然都说Winform做得软件不如WPF界面美观效 ...
- 在Winform界面中实现对多文档窗体的参数传值
在Winform界面中窗体我们一般使用多文档进行展示,也就是类似一般的选项卡的方式可以加载多个窗体界面.一般来说,我们如果打开新的窗体,给窗体传递参数是很容易的事情,但是在框架层面,一般的窗体是通过动 ...
随机推荐
- BlockingQueue的使用
本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同 ...
- SVN提交.a文件的方法
选择菜单View-->Ignored Files,这样就会显示出ignored的文件,找到你要上传的.a文件,右键“Add”就可以了.
- YII实现Memcache故障转移的配置办法
YII在默认配置下连接Memcache失败时会报错,要想实现故障转移就要改一下配置和代码 1.首先修改一下YII的 caching/CMemCache.php,我的版本是 1.1.7 找到 $cach ...
- C# 模拟并发
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客! 当然,题外话说多了,咱进入正题! 在处理大数据的时候,经常会发生并发,并发的情况发生后,会出现数据污读,从而产生脏数据. 首 ...
- 使用ajax请求,模态框调用并更改密码
前端页面 <a href="javascript:void(0);" onclick="changPassword()"> <i class= ...
- mysqld_multi部署mysql单机多实例
1.安装gcc-c++.ncurses依赖包 # yum install gcc-c++ ncurses-devel 2.安装cmake,用来编译mysql # tar -xvf cmake-3.2. ...
- ios提示框,自动消失
-(void)click { NSString *showMsg = @"点击我,开始提示"; int width = showMsg.length * 20; UIWindow ...
- C# ?和??运算表达式
1.单问号(?) 作用:用于给变量设初化的时候,给变量(int类型)赋为null值,而不是0. 例子: public int a; //默认值为0 public int ?b; //默认值为null ...
- 判断UpLoader是否安装了Flash
var flashVersion = (function() { var version; try { version ...
- PostgreSQL中字符串相关问题
PostgreSQL的字符串类型有character.character varying和text的值.在使用character类型的时候, 它有自动填充空白的潜在影响,特别是在其它数据库(MySQL ...