gpt4 book ai didi

c# - 在表单加载时停止 MdiChild 表单在父容器内漫游

转载 作者:太空狗 更新时间:2023-10-30 01:36:11 26 4
gpt4 key购买 nike

每次我重新打开 MdiParent 容器内的表单时,子表单都会向下和向右移动少量(~20 像素)。

有没有办法阻止表单在加载表单时执行此操作,而不阻止它在父级中自由移动?

这是一个例子:

enter image description here

然后重新加载子表单:

enter image description here

最佳答案

更改 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;
}
}

关于c# - 在表单加载时停止 MdiChild 表单在父容器内漫游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22953983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com