如何检测现代多监视器系统上的窗口是否可见

时间:2012-12-11 15:28:48

标签: c# winforms

如何检测窗口是否对用户不可见,然后将其移动到可见的位置,以允许用户根据自己的喜好调整大小。

问题: - 我有一个程序,可以保存表格的位置和大小,这是完美的。 不幸的是,许多用户现在拥有多个屏幕图形卡,可以在重复和扩展之间切换。

因此,如果用户关闭表单(程序保存它的位置)并且用户将系统切换为从重复扩展,则打开程序。  程序表单现在不可见,因为它已超出当前屏幕系统的限制:( 用户可以看到它在任务栏上运行。但是,单击该图标只会给出最小化或最大化程序的简短闪烁,右键单击只有关闭选项。

我需要捕获用户不可见的内容,然后自动调整大小到任何活动窗口。然后,用户可以根据需要调整大小/移动。

我欢迎任何想法/指针

2 个答案:

答案 0 :(得分:4)

在MSDN论坛上为同一问题提供了

This answer - 基本上,它是对屏幕边界的快速检查,并检查程序是否在这些范围内。如果没有,则将其移至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 );
    }
} 

答案 1 :(得分:0)

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

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