如何在C#中的当前屏幕上显示窗体?

如何在C#中的当前屏幕上显示窗体?,c#,winforms,forms,windows-forms-designer,C#,Winforms,Forms,Windows Forms Designer,我想在调用表单的同一窗口中显示一个新表单。 我知道一种在PrimaryScreen或虚拟屏幕上显示此表单的方法,代码如下: MyForm.Location = Screen.PrimaryScreen.Bounds.Location; 但我想在当前屏幕上显示它。 有没有办法在当前屏幕上找到并显示它?您可以使用相同的技术,但不是使用PrimaryScreen,而是使用和抓取屏幕: 听起来您没有将起始位置设置为手动。我已经做了类似的操作,将我的表单显示在当前屏幕的中心位置: var screen

我想在调用表单的同一窗口中显示一个新表单。 我知道一种在PrimaryScreen或虚拟屏幕上显示此表单的方法,代码如下:

MyForm.Location = Screen.PrimaryScreen.Bounds.Location;
但我想在当前屏幕上显示它。
有没有办法在当前屏幕上找到并显示它?

您可以使用相同的技术,但不是使用PrimaryScreen,而是使用和抓取屏幕:


听起来您没有将起始位置设置为手动。

我已经做了类似的操作,将我的表单显示在当前屏幕的中心位置:

var screen = Screen.FromPoint(Cursor.Position);
myForm.StartPosition = FormStartPosition.Manual;
myForm.Left = screen.Bounds.Left + screen.Bounds.Width / 2 - myForm.Width / 2;
myForm.Top = screen.Bounds.Top + screen.Bounds.Height / 2 - myForm.Height / 2;

如果您已经有一个父窗体,并且希望在同一屏幕上打开一个新窗体,请为ShowDialog方法提供对父窗体的引用:
newForm.ShowDialog(this)
不带所有者参数(“
”),即使父窗体位于另一屏幕上,新窗体也可能在主屏幕上打开

  • 在设计模式下单击表单
  • 将StartPosition属性更改为CenterScreen
  • 这将在活动屏幕上打开窗体。参考
    了解StartPosition的更多价值。

    我知道现在已经晚了,但还是要发布我的答案,希望它能帮助其他人。经过几次尝试,我用3台显示器完成了这项工作

    var currentScreen = Screen.FromControl(this);
            if (!currentScreen.Primary)
            {
                var hCenter = currentScreen.Bounds.Left + (((currentScreen.Bounds.Right - currentScreen.Bounds.Left) / 2) - ((Width) / 2));
    
                var vCenter = (currentScreen.Bounds.Bottom / 2) - ((Height) / 2);
                StartPosition = FormStartPosition.Manual;
                Location = new Point(hCenter, vCenter);
            }
            else
            {
                CenterToScreen();
            }
    

    这是您的应用程序的主窗体,还是有所有者?您是否尝试用新窗体替换显示的窗体?好像你在做巫师一样?我试过了。但是新表单仍然显示在主屏幕上,并且表单大小变短了一点。我试图显示光标所在的屏幕是否是主屏幕,我得到了正确的答案。但是当我分配位置时,它没有被正确分配。
    var currentScreen = Screen.FromControl(this);
            if (!currentScreen.Primary)
            {
                var hCenter = currentScreen.Bounds.Left + (((currentScreen.Bounds.Right - currentScreen.Bounds.Left) / 2) - ((Width) / 2));
    
                var vCenter = (currentScreen.Bounds.Bottom / 2) - ((Height) / 2);
                StartPosition = FormStartPosition.Manual;
                Location = new Point(hCenter, vCenter);
            }
            else
            {
                CenterToScreen();
            }