如何判断我的表单是否显示在屏幕之外?

时间:2009-04-08 21:18:46

标签: c# winforms .net-3.5 screen-positioning

所以我有两种形式,mainform和extraform 当mainform初始化时,extraform设置始终移动到mainform的右侧 有时,mainform会占用两个显示器,并且从屏幕上推出的extraform永远不会被再次看到。我想尽可能防止这种情况发生。我怎么能这样做?它必须支持双显示器,它们之间可能有或没有距离(即屏幕1是屏幕2左侧20px)。

我该怎么做?

3 个答案:

答案 0 :(得分:6)

您可以使用Screen类来确定窗口相对于桌面的位置。 Screen类有一个FromRectangle方法,因此你可以找出你应该在哪个屏幕上放置你的Form(通过传递你的表单的Bounds属性)。

每个Screen对象都有一个Bounds属性,您可以使用该属性来比较窗口的位置和大小,并相应地调整它们。

答案 1 :(得分:1)

这取决于当推出extraform超出屏幕范围时你想要发生什么。

但是,要了解它是否被推迟,使用System.Windows.Forms.Screens类非常简单。然后你可以像这样进行边界检查:

        foreach (var screen in Screen.AllScreens)
        {
            if(screen.Bounds.Contains(this.Bounds))
            {
                Console.WriteLine("Device "+screen.DeviceName+" contains form!");
            }
        }

代码假设处于某种形式。请注意,如果表单完全包含在屏幕上,此代码仅打印屏幕包含表单。但根据您的需要,这应该很容易修复。

答案 2 :(得分:0)

也许您表单中的DesktopLocation属性可以为您提供有关正在发生的事情的线索