如何提高 windows 表单设计器在大表单中的性能?
How to improve the performance of windows form designer in big forms?
在我工作的地方,我发现一个应用程序有一个很大的表单,有一个选项卡控件和 14 个标签页,每个标签页都有很多控件和面板相互重叠,这使得 windows 表单设计器真的很慢。保存需要 1 分钟,更改标签页和更改文本框需要 10 多秒 属性。
我试图以较小的形式分隔标签页,并将这些表单称为标签页的子项,以创建标签页处于同一表单中的错觉,但这没有用,因为当我将表单加载到一个标签页然后所有尺寸和位置都搞砸了。
有没有一种方法可以在不彻底改变应用程序工作方式的情况下提高 windows 表单设计器的性能?
创建 14 UserControls 并调整选项卡控件的大小以仅显示选项卡 header 并在选项卡控件下方放置一个 Panel
作为占位符。 Then when a tab page is selected dynamically add one of the user controls to the panel with docking set to Fill
.
public Form1()
{
InitializeComponent();
SelectUserControl();
}
private void TabControl1_Selected(object sender, TabControlEventArgs e)
{
SelectUserControl();
}
private void SelectUserControl()
{
UserControl? uc = (tabControl1.SelectedIndex + 1) switch {
1 => new UserControl1(),
2 => new UserControl2(),
3 => new UserControl3(),
...
14 => new UserControl14(),
_ => null
};
if (uc is not null) {
while (panel1.Controls.Count > 0) {
panel1.Controls[0].Dispose();
}
uc.Dock = DockStyle.Fill;
panel1.Controls.Add(uc);
}
}
当然,当用户控件更改或设置 Data Binding 源时,您将添加代码以加载和保存值。
但是如果你说保存需要1分钟,那么可能是你的保存过程不是最理想的。
在我工作的地方,我发现一个应用程序有一个很大的表单,有一个选项卡控件和 14 个标签页,每个标签页都有很多控件和面板相互重叠,这使得 windows 表单设计器真的很慢。保存需要 1 分钟,更改标签页和更改文本框需要 10 多秒 属性。
我试图以较小的形式分隔标签页,并将这些表单称为标签页的子项,以创建标签页处于同一表单中的错觉,但这没有用,因为当我将表单加载到一个标签页然后所有尺寸和位置都搞砸了。
有没有一种方法可以在不彻底改变应用程序工作方式的情况下提高 windows 表单设计器的性能?
创建 14 UserControls 并调整选项卡控件的大小以仅显示选项卡 header 并在选项卡控件下方放置一个 Panel
作为占位符。 Then when a tab page is selected dynamically add one of the user controls to the panel with docking set to Fill
.
public Form1()
{
InitializeComponent();
SelectUserControl();
}
private void TabControl1_Selected(object sender, TabControlEventArgs e)
{
SelectUserControl();
}
private void SelectUserControl()
{
UserControl? uc = (tabControl1.SelectedIndex + 1) switch {
1 => new UserControl1(),
2 => new UserControl2(),
3 => new UserControl3(),
...
14 => new UserControl14(),
_ => null
};
if (uc is not null) {
while (panel1.Controls.Count > 0) {
panel1.Controls[0].Dispose();
}
uc.Dock = DockStyle.Fill;
panel1.Controls.Add(uc);
}
}
当然,当用户控件更改或设置 Data Binding 源时,您将添加代码以加载和保存值。
但是如果你说保存需要1分钟,那么可能是你的保存过程不是最理想的。