如何在C#中显示当前屏幕上的表单?

时间:2010-06-19 00:34:05

标签: c# winforms forms windows-forms-designer

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

MyForm.Location = Screen.PrimaryScreen.Bounds.Location;

但我想在当前屏幕上显示它。 有没有办法找出并在当前屏幕上显示它?

6 个答案:

答案 0 :(得分:5)

我做了类似这样的事情来显示我的表格以当前屏幕为中心:

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;

答案 1 :(得分:2)

您可以使用相同的技术,但不是使用PrimaryScreen,而是使用Screen.FromPointCursor.Position抓住屏幕:

Screen screen = Screen.FromPoint(Cursor.Position);
MyForm.Location = screen.Bounds.Location;

答案 2 :(得分:1)

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

答案 3 :(得分:1)

  1. 在设计模式中单击表单。
  2. 将StartPosition属性更改为CenterScreen。
  3. 这应该会在活动屏幕上打开表单。参考 this获取更多StartPosition值。

答案 4 :(得分:0)

如果您已有父表单并想在同一屏幕上打开新表单,请为ShowDialog方法提供对父表单的引用:newForm.ShowDialog(this);没有所有者参数(" {{1} }")即使您的父表单在另一个屏幕上,新表单也可能在主屏幕上打开。

答案 5 :(得分:0)

我知道这很晚了,但是仍然发布我的答案,希望对别人有帮助。经过几次尝试,我用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();
        }