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

C# 如何判断我的表单是否显示在屏幕之外?,c#,winforms,.net-3.5,screen-positioning,C#,Winforms,.net 3.5,Screen Positioning,所以我有两种形式,主要形式和外部形式。 当mainform初始化时,extraform设置始终移动到mainform的右侧 有时mainform会同时占用监视器,extraform会被从屏幕上推出,再也看不到了。如果可能的话,我想防止这种情况发生。我怎样才能做到?它必须支持双监视器,它们之间可能有距离,也可能没有距离(即屏幕1在屏幕2左侧为20px) 如何执行此操作?您可以使用Screen类确定窗口相对于桌面的位置。Screen类有一个FromRectangle方法,因此您可以确定表单应该放在哪

所以我有两种形式,主要形式和外部形式。
当mainform初始化时,extraform设置始终移动到mainform的右侧
有时mainform会同时占用监视器,extraform会被从屏幕上推出,再也看不到了。如果可能的话,我想防止这种情况发生。我怎样才能做到?它必须支持双监视器,它们之间可能有距离,也可能没有距离(即屏幕1在屏幕2左侧为20px)


如何执行此操作?

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


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

也许表单中的DesktopLocation属性可以为您提供有关表单中发生的事情的线索。这取决于当将extraform推到屏幕边界之外时您希望发生什么

但是,要确定它是否被取消,使用System.Windows.Forms.Screens类非常简单。然后您可以像这样执行边界检查:

        foreach (var screen in Screen.AllScreens)
        {
            if(screen.Bounds.Contains(this.Bounds))
            {
                Console.WriteLine("Device "+screen.DeviceName+" contains form!");
            }
        }
代码假定以某种形式存在。请注意,如果表单完全包含在屏幕上,则此代码仅打印屏幕包含表单。但这应该是相当简单的修复,取决于您的需要