每次我在MdiParent容器中重新打开一个表单时,子表单会向下和向右移动一小部分(约20个像素)。
有没有办法在表单加载时阻止它这样做,而不影响其在父容器中的自由移动?
以下是示例:
然后重新加载子表单:
有没有办法在表单加载时阻止它这样做,而不影响其在父容器中的自由移动?
以下是示例:
![enter image description here](https://istack.dev59.com/M9k8z.webp)
![enter image description here](https://istack.dev59.com/uDQOo.webp)
修改子窗体的StartPosition
属性:
StartPosition = FormStartPosition.Manual
WindowsDefaultLocation
,每次子窗体的实例都会向下和向右漂移。
MdiChild
窗体且首次显示时,以下代码块从Form
类中被调用。(我删除了一些不相关的部分。)Manual
以外的所有StartPosition
值,都会进行关于窗体位置的一些计算,但对于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;
}
}