C# Winform:在显示前获取表单位置(StartupPosition是中心屏幕)

C# Winform:在显示前获取表单位置(StartupPosition是中心屏幕),c#,winforms,position,C#,Winforms,Position,有什么办法可以这样做吗?据我所知,这应该是可能的,但如果我在显示表单之前尝试myForm.Location,我会得到(0,0) 谢谢 了解表单位置的最佳方法是确定您想要的位置并将其放在那里 Form formDemo = new DemoForm(); formDemo.Location = new Point(20, 30); formDemo.Show(); //or formDemo.ShowDialog(); 在@Diego澄清了他的问题后,我相信这将满足需要:

有什么办法可以这样做吗?据我所知,这应该是可能的,但如果我在显示表单之前尝试
myForm.Location
,我会得到
(0,0)


谢谢

了解表单位置的最佳方法是确定您想要的位置并将其放在那里

   Form formDemo = new DemoForm();
   formDemo.Location = new Point(20, 30);
   formDemo.Show(); //or formDemo.ShowDialog();
在@Diego澄清了他的问题后,我相信这将满足需要:

    int ScreenWidth = Screen.PrimaryScreen.WorkingArea.Width;
    int ScreenHeight = Screen.PrimaryScreen.WorkingArea.Height;
    int formTop = (ScreenHeight/2) - (formDemo.Height / 2);
    int formLeft = (ScreenWidth/2) - (formDemo.Width / 2);

我认为从技术上讲,在抽签之前你没有一个位置。我个人不知道如何将“System.Windows.Forms.FormStartPosition”枚举转换为点

然而,对于你想要的,它应该是相当简单的。我会显示第一个表单,然后将它的边界传递给第二个表单,您可以在其中设置它的启动逻辑,以使用这些逻辑进行定位。像这样

 public Form1()
    {
        InitializeComponent();

        StartPosition = FormStartPosition.CenterScreen;
        this.Shown += new EventHandler(Form1_Shown);
    }

    void Form1_Shown(object sender, EventArgs e)
    {
        ShowForm2(this.Bounds);
    }  

    public void ShowForm2(Rectangle ParentBounds)
    {
        Form2 f = new Form2();

        int x = ParentBounds.Right+2;
        int y = ParentBounds.Y + (ParentBounds.Height/2) - (f.Height/2);

        Point childStartPosition = new Point(x,y);

        f.StartPosition = FormStartPosition.Manual;
        f.Location = childStartPosition;
        f.Show();
    }

您需要这些信息做什么?尽管此表单显示为模式对话框(
ShowDialog
),但在显示之前,我需要显示其他表单,这些表单将根据此表单位置进行定位。我有一个后续问题要问你们。。对不起,我想这是个误会。表单将CenterScreen作为StartupPosition,这就是它需要的方式。我需要的是知道表单在屏幕中央开始的位置。我想是的,我会接受答案,但我明天会测试它。希望它能起作用!这是不正确的,窗体的高度和宽度属性会更改以适应视频适配器的DPI设置。您必须等待加载事件触发。只有这样,您才知道表单的实际大小(和位置)。