C#CenterParent使用ShowDialog无法正常工作

时间:2012-07-20 23:07:56

标签: c# forms position

我无法让儿童表格与父母一起居中。我一直在尝试各种各样的建议,从使用或不使用ShowDialog到各种糟糕的“计算你的表格的位置”代码。

我认为这真的不应该那么复杂。

无论如何,这里有一些代码。下面的代码是我实例化表单并要求它打开的地方。此代码中的this是MainForm。

FormName myForm = new FormName();
myForm.ShowDialog(this);

我已将表单的StartPosition设置为CenterParent,但如果我移动MainForm并重新打开表单,则不会跟随。事实上,无论如何,它都保持在正确的位置。它甚至不是中心屏幕!

在表单的构造函数中,我没有设置任何形式的位置。

我也没有在表单的Load方法中设置表单位置的任何内容。

请帮忙!

编辑: 我已经尝试单步执行构造函数并加载表单的方法,看看他们是否在完成之前进行了救助,并且工作正常。

2 个答案:

答案 0 :(得分:4)

事实证明,将代码添加到表单的构造函数是一个坏主意,并导致各种奇怪的行为。相反,应该在Form Load事件上添加表单的代码。这是我问题的根源。

答案 1 :(得分:0)

以下代码适用于我:

var MainForm = new Form();
var SubForm = new Form {
    StartPosition = FormStartPosition.CenterParent,
    Width = 200,
    Height = 200,
};

MainForm.MouseClick += (sender, args) => { SubForm.ShowDialog(MainForm); };
MainForm.Show();

当您双击MainForm时,它会打开以它为中心的SubForm。然后当你关闭子窗体并移动MainForm时,再次双击MainForm时,SubForm再次显示为MainForm的居中。