변경을 자식 폼에 StartPosition
특성기본값은 WindowsDefaultLocation
입니다. 그러면 하위 폼의 각 인스턴스가 매번 오른쪽 아래로 드리프트됩니다. 폼은 폼 MdiChild
때
Form
클래스 다음의 코드 블록이라고하며, 형태는 처음에 표시되고있다. (나는 어떤 관련이없는 부분을 손질.)
을 다른 모든 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;
}
}