C# Show()稍微移动表单位置

C# Show()稍微移动表单位置,c#,winforms,C#,Winforms,我有一个主窗体的应用程序,它作为一种框架,在主窗体内部有一个区域,我可以打开其他窗体。不得关闭这些表单,因此当打开新表单时,我将使用此代码首次打开它: frm.WindowState = FormWindowState.Maximized; frm.BringToFront(); 如果在上面打开另一个表单,我需要再次显示它,我只需使用: frm.Show(); 问题是,当我第一次打开表单时,它的位置很好,并且边框排列得很好。当我使用frm.Show()使其返回时,它会稍微向左和向下移动它。有

我有一个主窗体的应用程序,它作为一种框架,在主窗体内部有一个区域,我可以打开其他窗体。不得关闭这些表单,因此当打开新表单时,我将使用此代码首次打开它:

frm.WindowState = FormWindowState.Maximized;
frm.BringToFront();
如果在上面打开另一个表单,我需要再次显示它,我只需使用:

frm.Show();

问题是,当我第一次打开表单时,它的位置很好,并且边框排列得很好。当我使用frm.Show()使其返回时,它会稍微向左和向下移动它。有什么线索吗?

根据您的解释,我知道您正在使用父窗体来包含MDI子窗体(如果我错了,请纠正我)

当显示新的MDI子窗体时,会将其放置为使子窗体处于“级联”状态,即每个子窗体位于前一个窗体的相同位置加上一个偏移量。当您隐藏子窗体并再次显示它时,MDI容器可能会认为它是一个新的子窗体,并相应地放置


我认为您需要在隐藏子窗体之前保存它的位置,以便在再次显示它时恢复它

您应该在“窗体属性”窗口中将StartPosition属性设置为“手动”


frm.StartPosition=System.Windows.Forms.FormStartPosition.Manual

所以对于所有20个左右的表单,我需要保存每个表单的位置并保持跟踪?或者有没有办法在这个特定的位置说frm.Show()?您可以在子表单本身的代码中跟踪该位置。。。更好的是,如果您有不同类型的子窗体,请创建一个处理该窗体并从中继承的基MdiChild类