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设置。您必须等待加载事件触发。只有这样,您才知道表单的实际大小(和位置)。