If you want to ensure a windows form cannot be dragged out of the view-able area of a multiple monitor screen and also want the option to dock it to the monitor it was actively on, then this code might be helpful. It also has a tolerance level of 50% where 50% of the form can be out of the view-able area.
You might think you do not need to enumerate the screens, but you do, if you want to dock it, especially if some screens are portrait and others are landscape.
You can optimize the code by storing the LeftMost and RightMost screen in a global static location.
private void DockFormIfOutOfViewableArea() { var widthTolerance = Location.X + (Width / 2); var heightTolerance = Location.Y + (Height / 2); Screen.AllScreens.OrderBy(r => r.WorkingArea.X).ForEach(screen => { if (!IsOnThisScreen(screen)) return; if (heightTolerance > screen.WorkingArea.Height) Location = new Point(screen.WorkingArea.X, screen.Bounds.Height - Height + screen.Bounds.Y); if (Location.Y < screen.WorkingArea.Y ) Location = new Point(screen.WorkingArea.X, screen.WorkingArea.Y); }); if (widthTolerance > SystemInformation.VirtualScreen.Right) { var closestScreen = Screen.AllScreens.OrderBy(r => r.WorkingArea.X).Last(); Location = new Point(closestScreen.Bounds.Right - Width, closestScreen.Bounds.Height - Height + closestScreen.Bounds.Y); } if (widthTolerance < SystemInformation.VirtualScreen.Left) { var closestScreen = Screen.AllScreens.OrderBy(r => r.WorkingArea.X).First(); Location = new Point(closestScreen.Bounds.Left, closestScreen.Bounds.Height - Height + closestScreen.Bounds.Y); } }