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

            }
  • 相关阅读:
    CF732 F Tourist Reform——边双连通分量
    CF36 E Two Paths——欧拉(回)路
    最小生成树()
    Bellman-Ford算法
    SPFA算法
    归并排序(Merge_Sort)
    并查集
    int(3)与int(11)的区别
    mysql应该看的blog
    mysql建立索引
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1646433.html
Copyright © 2011-2022 走看看