在窗体加载时阻止子窗体在父容器中漫游

4
每次我在MdiParent容器中重新打开一个表单时,子表单会向下和向右移动一小部分(约20个像素)。
有没有办法在表单加载时阻止它这样做,而不影响其在父容器中的自由移动?
以下是示例: enter image description here 然后重新加载子表单: enter image description here
1个回答

3

修改子窗体的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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接