0

我无法让子表单以它的父表单为中心。我一直在尝试各种建议,从使用或不使用 ShowDialog 到各种古怪的“计算表单的位置”代码。

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

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

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

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

在表单的构造函数中,我没有对表单的位置进行任何设置。

我也没有在表单的 Load 方法中对表单的位置进行任何设置。

请帮忙!

编辑:我尝试单步执行表单的构造函数和加载方法,以查看它们是否在完成之前救助并且它们工作得很好。

4

2 回答 2

4

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

于 2012-10-16T23:08:01.583 回答
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。然后当您关闭子窗体并移动主窗体时,再次双击主窗体时,子窗体再次以主窗体居中显示。

于 2012-07-20T23:26:33.107 回答