为了解释所有内容,我将从实际项目中简化示例,使其更易于理解。我有一个主菜单,最左边有菜单按钮,中间是一个面板。单击任何菜单按钮,将在PanelForms
中打开一个表单,并关闭以前打开的表单。参见下面的插图。
^例如:单击按钮Settings
将在FormSettings
内部打开PanelForms
。
执行此/最佳做法的好方法是什么?在下面的代码中,您会看到我在做什么,但是我觉得它可以进行一些优化-并且这样做无法允许我在加载时添加预加载器(一个简单的GIF或progressbar就可以了)将表格放到面板上。我以为该解决方案可以与threading
和/或backgroundworkers
一起使用,但是找不到适合我情况的好的解决方案-或弄清楚如何正确使用它。
现在,这就是我要做的(其他形式完全一样):
formSettings fsOpen = null;
private void btnSettings_Click(object sender, EventArgs e)
{
fsOpen = new formSettings();
fsOpen.TopLevel = false;
fsOpen.AutoScroll = true;
fsOpen.AutoScaleMode = AutoScaleMode.Dpi;
this.panelForms.Controls.Add(fsOpen);
fsOpen.Dock = DockStyle.Fill;
fsOpen.Show();
fsOpen.BringToFront();
}
通过这种方式,我可以轻松关闭表单,并在单击fsOpen.Close();
这样的另一个menuButton时将其替换为另一表单。
我不希望有一个完整的详细答案可以完全解决这个问题,但是如果有人至少可以使我朝正确的方向发展(最好是举一些例子),那就太好了。我在谷歌搜索中发现的信息使我感到非常困惑-看来有很多解决方法。
其他信息
这是由Visual Studio 2017制作的.net Windows应用程序-同时使用代码和设计器工具。所有的表单都有大量的控件要加载,其中有几个正在从XML读取大量信息并填充到datagridview中。表单现在需要1-2秒来加载,这还不错,但是在加载表单等控件时,我可以看到一些闪烁。