所以我有两种形式,mainform和extraform。
当 mainform 初始化时,extraform 设置总是移动到 mainform 的右侧
有时 mainform 占用了两个监视器,extraform 被推离屏幕,再也看不到了。如果可能的话,我想防止这种情况发生。我该怎么做?它必须支持双显示器,它们之间可能有也可能没有距离(即屏幕 1 距屏幕 2 左侧 20 像素)。
我怎样才能做到这一点?
所以我有两种形式,mainform和extraform。
当 mainform 初始化时,extraform 设置总是移动到 mainform 的右侧
有时 mainform 占用了两个监视器,extraform 被推离屏幕,再也看不到了。如果可能的话,我想防止这种情况发生。我该怎么做?它必须支持双显示器,它们之间可能有也可能没有距离(即屏幕 1 距屏幕 2 左侧 20 像素)。
我怎样才能做到这一点?
您可以使用 Screen 类来确定您的窗口相对于桌面的位置。Screen 类有一个 FromRectangle 方法,因此您可以确定应该将 Form 放置在哪个屏幕上(通过传入表单的 Bounds 属性)。
每个 Screen 对象都有一个 Bounds 属性,您可以使用它来比较窗口的位置和大小,并相应地调整它们。
当extraform被推到屏幕边界之外时,这取决于您想要发生的事情。
但是,要确定它是否被推迟,使用 System.Windows.Forms.Screens 类非常简单。然后你可以像这样进行边界检查:
foreach (var screen in Screen.AllScreens)
{
if(screen.Bounds.Contains(this.Bounds))
{
Console.WriteLine("Device "+screen.DeviceName+" contains form!");
}
}
代码假定存在于一种形式中。请注意,如果表单完全包含在屏幕上,则此代码仅打印屏幕包含表单。但这应该很容易解决,具体取决于您的需要。
也许您的 Forms 中的 DesktopLocation 属性可以为您提供有关它们正在发生的事情的线索