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界面中窗体我们一般使用多文档进行展示,也就是类似一般的选项卡的方式可以加载多个窗体界面.一般来说,我们如果打开新的窗体,给窗体传递参数是很容易的事情,但是在框架层面,一般的窗体是通过动 ...
随机推荐
- ios - 图片自动轮播定时器(NSTimer)以及消息循环模式简介
本文只是演示如何设置图片轮播的定时器. 创建全局变量NSTimer 程序启动后就开始轮播图片,所以在- (void)viewDidLoad中就启动定时器. 将定时器放入消息循环池中.- (void)v ...
- OTG 接口烧写最小Linux的方法
通过该方式可以烧写Android4.0.3 系统和Linux-QT 系统. 需要准备一根OTG 线,绝大多数智能手机和PC 机相连接的线都是OTG线,都是通用的. 这种方式比TF卡烧写方式要快一些,我 ...
- Hanoi T note
hanoi(n,x,y,z) { hanoi(n-1,x,z,y);//n-1 from x to y move(x,z);//x->z hanoi(n-1,y,x,z);//n-1 from ...
- css 字数超过一行显示省略号
display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
- 支持正则或通配符的hashmap
RegexpKeyedMap http://wiki.apache.org/jakarta/RegexpKeyedMap RegexHashMap https://heideltime.googlec ...
- 通过zabbix自带模板监控windowsPC机器
通过zabbix自带模板监控windowsPC机器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 相信有很多 ...
- java List 简单使用
Student类 class Student{ String name; String pwd; public Student(){} public Student(String name, Stri ...
- [原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java dyn proxy
package dyn; public interface RealService { void buy(); } =================== package dyn; public cl ...
- Logstash学习1-logstash的简单例子
如何安装ELK Redis插件 1. 安装好logstash后.2. 最简单的logstash.logstash -e 'input { stdin { } } output { stdout {} ...