每当我在MdiParent
容器内重新打开表单时,子表单向下并向右移动少量(~20像素)。
有没有办法阻止表单在表单加载时执行此操作,而不会阻止它在父表单中自由移动?
以下是一个例子:
然后重新加载子表单:
答案 0 :(得分:3)
更改子表单上的StartPosition
属性:
StartPosition = FormStartPosition.Manual
默认值为WindowsDefaultLocation
,这会导致子表单的每个实例每次向下和向右漂移。
当表单是Form
表单时,将调用MdiChild
类中的以下代码块,并且最初显示表单。 (我修剪了一些不相关的部分。)
对于StartPosition
旁边的所有其他Manual
值,有关于表单位置的一些计算,但它对StartPosition.Manual
没有任何作用。
// Adjusts the CreateParams to reflect the window bounds and start position.
private void FillInCreateParamsStartPosition(CreateParams cp) {
switch ((FormStartPosition)formState[FormStateStartPos]) {
case FormStartPosition.WindowsDefaultBounds:
cp.Width = NativeMethods.CW_USEDEFAULT;
cp.Height = NativeMethods.CW_USEDEFAULT;
...
case FormStartPosition.WindowsDefaultLocation:
case FormStartPosition.CenterParent:
...
cp.X = NativeMethods.CW_USEDEFAULT;
cp.Y = NativeMethods.CW_USEDEFAULT;
break;
case FormStartPosition.CenterScreen:
if (IsMdiChild) {
...
cp.X = Math.Max(clientRect.X,clientRect.X + (clientRect.Width - cp.Width)/2);
cp.Y = Math.Max(clientRect.Y,clientRect.Y + (clientRect.Height - cp.Height)/2);
}
else {
...
if (WindowState != FormWindowState.Maximized) {
cp.X = Math.Max(screenRect.X,screenRect.X + (screenRect.Width - cp.Width)/2);
cp.Y = Math.Max(screenRect.Y,screenRect.Y + (screenRect.Height - cp.Height)/2);
}
}
break;
}
}