• Winform窗体实现类似停靠在屏幕边缘时自动隐藏的功能


    该功能主要用到了计时器和Frm_LocationChanged事件。代码如下;

         private void FrmLocation_Load(object sender, EventArgs e)
            
    {
                
    this.TopMost = true;
                Timer checkDockTimer 
    = new Timer();
                checkDockTimer.Tick 
    += new EventHandler(StopRectTimer_Tick);
                checkDockTimer.Interval 
    = 100;
                checkDockTimer.Enabled 
    = true;
            }



            
    private void StopRectTimer_Tick(object sender, EventArgs e)
            
    {
                
    //如果鼠标在窗体上,则根据停靠位置显示整个窗体
                if (this.Bounds.Contains(Cursor.Position))
                
    {
                    
    switch (this.StopDock)
                    
    {
                        
    case AnchorStyles.Top:
                            
    this.Location = new Point(this.Location.X, 0);
                            
    break;
                        
    case AnchorStyles.Bottom:
                            
    this.Location = new Point(this.Location.X, Screen.PrimaryScreen.Bounds.Height - this.Height);
                            
    break;
                        
    case AnchorStyles.Left:
                            
    this.Location = new Point(0this.Location.Y);
                            
    break;
                        
    case AnchorStyles.Right:
                            
    this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - this.Width, this.Location.Y);
                            
    break;
                    }

                }

                
    else  //如果鼠标离开窗体,则根据停靠位置隐藏窗体,但须留出部分窗体边缘以便鼠标选中窗体
                {
                    
    switch (this.StopDock)
                    
    {
                        
    case AnchorStyles.Top:
                            
    this.Location = new Point(this.Location.X, (this.Height - 3* (-1));
                            
    break;
                        
    case AnchorStyles.Bottom:
                            
    this.Location = new Point(this.Location.X, Screen.PrimaryScreen.Bounds.Height - 5);
                            
    break;
                        
    case AnchorStyles.Left:
                            
    this.Location = new Point((-1* (this.Width - 3), this.Location.Y);
                            
    break;
                        
    case AnchorStyles.Right:
                            
    this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 2this.Location.Y);
                            
    break;
                    }

                }

            }


            
    /// <summary>
            
    /// 更改窗体的位置时,根据和各个窗体边缘的距离赋值停靠的位置
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>

            private void FrmLocation_LocationChanged(object sender, EventArgs e)
            
    {
                
    if (this.Top <= 0)                     
                
    {
                    
    this.StopDock = AnchorStyles.Top;
                }

                
    else if (this.Bottom >= Screen.PrimaryScreen.Bounds.Height)
                
    {
                    
    this.StopDock = AnchorStyles.Bottom;
                }

                
    else if (this.Left <= 0)
                
    {
                    
    this.StopDock = AnchorStyles.Left;
                }

                
    else if (this.Left >= Screen.PrimaryScreen.Bounds.Width - this.Width)
                
    {
                    
    this.StopDock = AnchorStyles.Right;
                }

                
    else
                
    {
                    
    this.StopDock = AnchorStyles.None;
                }

            }
  • 相关阅读:
    BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
    HDU 6602 Longest Subarray (线段树)
    HDU 6521 K-th Closest Distance (主席树+二分)
    2019牛客多校2 H Second Large Rectangle(悬线法)
    The 2019 University of Jordan Collegiate Programming Contest
    CLR via C# 阅读 笔记
    C# 访问https 未能创建 SSL/TLS 安全通道
    转载文章——Datatable删除行的Delete和Remove方法
    ASP.NET Request.UrlReferrer 问题
    ASP.NET WebMethod方法使用 、AngularJS $http请求、 Jquery $.ajax请求
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1646433.html
Copyright © 2020-2023  润新知