zoukankan      html  css  js  c++  java
  • 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 = 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
        }
    }
    View Code

    参考:屏幕、任务栏 工作域大小

    当前的屏幕除任务栏外的工作域大小
        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);
    View Code
  • 相关阅读:
    C#开发模式——单例模式
    C#开发模式——单例模式
    Memcached的基础梳理
    Memcached的基础梳理
    Memcached的基础梳理
    Memcached的基础梳理
    13条只有程序员才能懂的内涵段子
    13条只有程序员才能懂的内涵段子
    网页性能优化
    webpack中使用ECharts
  • 原文地址:https://www.cnblogs.com/shenchao/p/4722233.html
Copyright © 2011-2022 走看看