2012-12-11 25 views
2

如何检测用户是否看不到窗口,然后将其移动到可见的位置以允许用户根据自己的喜好调整大小。如何在现代多显示器系统上检测窗口是否可见

问题: - 我有一个程序,保存完美的作品的位置和大小。 不幸的是,许多用户现在有多个屏幕显卡,可以在复制和扩展之间切换。因此,如果用户关闭表单(程序保存在原来的位置),并且用户将他的系统切换为从重复表示扩展,然后打开程序。 程序表单现在不可见,因为它已经移出了当前屏幕系统的限制:( 用户可以看到它在任务栏上运行,但是单击该图标只会提供最小化或最大化程序的简短闪烁,右键单击只需要关闭该选项。

我需要陷阱不可见的用户,然后自动调整到任何活动窗口。然后,用户可以调整大小/移动,因为他们认为合适的。

我会欢迎任何想法/指针

+0

您是否有自定义逻辑来保存窗口的屏幕位置? –

+0

你不想让操作系统来处理吗? – Jodrell

+0

@Jodrell,操作系统会记住从属于主应用程序窗口的窗口的位置吗? –

回答

4

This answer在MSDN论坛上提供了相同的问题 - 实质上,它是一个快速检查的屏幕边界,并检查程序是否在这些边界内。如果不是,它移动到0, 0

using System.Windows.Forms; 

class Form1 : Form { 
    protected void EnsureVisible() { 
     foreach (Screen scrn in Screen.AllScreens) { 
     // You may prefer Intersects(), rather than Contains() 
      if (scrn.Bounds.Contains(this.Bounds)) { 
       return; 
      } 
     } 
     this.Location = new Point(0, 0); 
    } 
} 
+0

我将首先尝试这个想法;因为它有示例代码:) – Hunt

+0

改为使用Screen.FromRectangle()。 –

+0

谢谢大家。现在我已经使用Jared Harley提供的代码处理程序了。 – Hunt

0

你可以利用AllScreens属性让所有连接到电脑屏幕的列表。使用它,您可以检查每个屏幕的边界框,并测试您的窗口是否位于所有窗口之外。如果是,则重置该位置。

当我打字时,Jared Harley打败了我。

相关问题