Search code examples
c#winformsscreen

Determining if a form is completely off screen


I am developing an application that remembers the user's preferences as to where the form was last located on the screen. In some instances the user will have it on a secondary screen, and then fire the app up later without the second screen (sometimes having the form appear off screen). Other times the user will change their resolution resulting in a similar effect.

I was hoping to do this checking in the Form_Shown event handler. Basically I want to determine whether the form is completely off screen so I can re-position it.

Any advice?


Solution

  • Check with this function if Form is fully on screen:

    public bool IsOnScreen( Form form )
    {
       Screen[] screens = Screen.AllScreens;
       foreach( Screen screen in screens )
       {
          Rectangle formRectangle = new Rectangle( form.Left, form.Top, 
                                                   form.Width, form.Height );
    
          if( screen.WorkingArea.Contains( formRectangle ) )
          {
             return true;
          }
       }
    
       return false;
    }
    

    Checking only top left point if it's on screen:

    public bool IsOnScreen( Form form )
    {
       Screen[] screens = Screen.AllScreens;
       foreach( Screen screen in screens )
       {
          Point formTopLeft = new Point( form.Left, form.Top );
    
          if( screen.WorkingArea.Contains( formTopLeft ) )
          {
             return true;
          }
       }
    
       return false;
    }