我之前问了这个问题,并且认为我已经弄明白但是它仍然无效. Form.Show()稍微移动窗体位置
所以我有一个父表单,用show()打开一堆子,然后当需要一个时,我使用bringToFront()来显示它.问题是当show()被调用时,子窗体完全对齐,但是当我使用bringToFront时,它会向左和向下移动1 px,这会使我的边框变形.我在show()之前将所有子窗体startPosition属性设置为Manual.我在前面设置了frm.location = new Point(x,y).当show()时,我也试过明确设置frm.location.当我带上ToFront()时,它仍然左右移动1 px.有没有什么与bringToFront()不允许我更改窗体的位置属性?这是我的代码:
if (myNewForm != null)
{
myNewForm.MdiParent = this;
bool isFormOpen = false;
foreach (Form frm in Application.OpenForms)
{
if (frm.GetType() == myNewForm.GetType())
{
frm.WindowState = FormWindowState.Maximized;
frm.BringToFront();
frm.Location = new Point(-4, -30);
isFormOpen = true;
break;
}
}
if (!isFormOpen)
{
myNewForm.StartPosition = FormStartPosition.Manual;
myNewForm.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:好的显然微软有一个错误,让StartPosition只适用于ShowDialog()而不是Show()但拒绝修复它:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeededID = 107589
但我的应用程序需要保持所有不同的表单打开,并在需要时将它们带到前面...所以ShowDialog()无法在这个实例中正确使用正确吗?那么我有什么选择?任何?
小智 21
如果您希望设置表单位置,则必须将表单设置WindowState
为Normal
(在任何其他设置上,根据该设置的规则为您设置位置,以便忽略您的值),并将其设置StartPosition
为Manual
.
frm.WindowState = FormWindowState.Normal;
frm.StartPosition = FormStartPosition.Manual;
frm.BringToFront();
frm.Location = new Point(-4, -30);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10885 次 |
最近记录: |