在下面的代码中,仅第二种方法对我有效(.NET 4.0)。 FormStartPosition.CenterParent
不会将子窗体置于其父窗体的中心。
为什么?
资料来源:this SO question
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
private static Form f1;
public static void Main()
{
f1 = new Form() { Width = 640, Height = 480 };
f1.MouseClick += f1_MouseClick;
Application.Run(f1);
}
static void f1_MouseClick(object sender, MouseEventArgs e)
{
Form f2 = new Form() { Width = 400, Height = 300 };
switch (e.Button)
{
case MouseButtons.Left:
{
// 1st method
f2.StartPosition = FormStartPosition.CenterParent;
break;
}
case MouseButtons.Right:
{
// 2nd method
f2.StartPosition = FormStartPosition.Manual;
f2.Location = new Point(
f1.Location.X + (f1.Width - f2.Width) / 2,
f1.Location.Y + (f1.Height - f2.Height) / 2
);
break;
}
}
f2.Show(f1);
}
}
最佳答案
这是因为您没有告诉f2
谁是Parent
。
如果这是MDI应用程序,则f2
应该将其MdiParent
设置为f1
。
Form f2 = new Form() { Width = 400, Height = 300 };
f2.StartPosition = FormStartPosition.CenterParent;
f2.MdiParent = f1;
f2.Show();
如果这不是MDI应用程序,则需要使用
ShowDialog
作为参数来调用f1
方法。Form f2 = new Form() { Width = 400, Height = 300 };
f2.StartPosition = FormStartPosition.CenterParent;
f2.ShowDialog(f1);
请注意,由于无法设置
CenterParent
,因此Show
无法与Parent
一起正常使用,因此,如果ShowDialog
不适当,则手动方法是唯一可行的方法。