C# 新节目前的表格关闭

C# 新节目前的表格关闭,c#,forms,visual-studio-2012,C#,Forms,Visual Studio 2012,您好,我正在使用Visual Studio以C#制作我的第一个Windows窗体应用程序,我有一个小问题 当我打开一个新表单并关闭上一个表单时,当我运行应用程序时,它看起来就像是在打开新表单之前关闭上一个表单。 它看起来不好,我想避免它 UserPanel MDIUserPanel = new UserPanel(Username); MDIUserPanel.MdiParent = this.MdiParent; MDIUserPanel.Show(); this.Close(); 我不知道

您好,我正在使用Visual Studio以C#制作我的第一个Windows窗体应用程序,我有一个小问题

当我打开一个新表单并关闭上一个表单时,当我运行应用程序时,它看起来就像是在打开新表单之前关闭上一个表单。 它看起来不好,我想避免它

UserPanel MDIUserPanel = new UserPanel(Username);
MDIUserPanel.MdiParent = this.MdiParent;
MDIUserPanel.Show();
this.Close();
我不知道出了什么问题。我将感谢任何帮助

沃思先生:, 暗色乳膏

@编辑

事实似乎并非如此。很可能是:

我有三个表格:主表格,登录,日志

MainForm是一个MDI容器,FormBorderStyle设置为固定的单个 登录名是FormBorderStyle设置为None的MainForm的子级 LoggedUser是FormBorderStyle设置为None的MainForm的子级

运行应用程序时,将在MainForm中创建登录表单。MainForm从其容器开始就从未关闭过

但是当我从登录表单移动到LoggedUser表单,反之亦然,它是用FormBorderStyle=Fixed Single(普通windows窗口)创建的,0.5秒后它变为None

将其编辑成这样并没有真正的帮助:

MDIUserPanel.FormBorderStyle = FormBorderStyle.None;
MDIUserPanel.Show();
@编辑2

这个零钱帮我解决了。我不知道为什么在表单属性上设置它不能正常工作。看起来表单是作为FormBorderStyle.FixedSingle创建的,然后它被更改为FormBorderStyle.None。如果我在加载时手动进行此操作,它会工作,但你也必须修复我窗口的大小。但这似乎不太好。它应该从一开始就工作,因为Designer中的表单属性从一开始就是这样的

private void UserPanel_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.None;
    this.Size = new Size(649, 357);
}
您可以使用表单的来确保在关闭旧表单之前已显示新表单

UserPanel MDIUserPanel = new UserPanel();
MDIUserPanel.Shown += ((s, ee) =>
{
    this.Close();
});
MDIUserPanel.Show();

如果您试图关闭的表单是运行应用程序时打开的主表单,那么这就是原因。关闭主窗体将退出您的应用程序。请尝试隐藏此窗体,而不是关闭它。为了确保您可以退出应用程序(“因为您隐藏了主窗体”),只需覆盖当前窗体的关闭事件,并在其中放置一个“application.exit()”。 希望这对你有帮助

第一步:
this.Hide()

第二步:
MDIUserPanel.Show()

不,它发生在所有表单上。不仅仅是第一个,好的,我已经试过了。它的工作原理是一样的。但这让我注意到了真正的问题。我的父项是MDIContainer with:FormBorderStyle:Fixed Single我的子项有:FormBorderStyle:None,但在创建子项并将其显示为FormBorderStyle:Fixed Single(普通windows窗口)时,在0.5秒后删除边框。否,我不会关闭主窗体。我的项目中的主窗体用作显示/关闭子窗体的MDI容器。我不希望以前的窗体被隐藏,因为在更大的应用程序中,它可能会造成超过10个窗口被“隐藏”的情况。我认为这太耗费资源了。此外,与强制更新隐藏的表单相比,它更容易打开此表单的新实例并加载更新日期(如果其他表单中有任何更改)。我甚至不知道如何在不将以前的表单引用到下一个表单的情况下执行该操作;第二步:MDIUserPanel.Show();这应该行得通