我使用的是带有菜单的基本表单,因此不必为整个应用程序重新编写代码。
本质上,此表单称为StudentBase.cs
然后我还有另一种叫做StudentProfile的表格,该表格继承自StudentBase
public partial class StudentProfile : StudentBase
{
public string selectedPage;
}
这将继承StudentBase中的菜单,而我不必重新执行菜单。
在菜单上,有用于各个表单的按钮。
假设我按了“学生资料”,然后使用它进行导航:
private void btnProfile_Click(object sender, EventArgs e)
{
//I don't want the page to reload if it is the current page
if (selectedPage != "Profile")
{
StudentProfile profile = new StudentProfile();
profile.Show();
this.Hide();
}
}
这样做会产生非常滞后的结果,而且看起来也很毛病
我在子表单中覆盖selectedPage,因此在使用StudentProfile的情况下:
private void StudentProfile_Load(object sender, EventArgs e)
{
selectedPage = "Profile";
}
我已经在朋友的代码上对此进行了测试,并且他的导航工作没有滞后或毛刺。他没有在表格上做继承
答案 0 :(得分:1)
继承解决方案的问题在于,当您创建 ADDRESS
__________
Finland
1 row selected.
的实例时,也会创建StudentProfile
形式的实例。您显示此新实例并隐藏旧实例。现在,您有两个StudentBase
实例(一个可见,一个隐藏)。当您从菜单中打开更多表单时,您将在内存中获得更多StudentBase
实例。即使它们被隐藏,它们仍然消耗资源。这可以解释您看到的结果。
我建议您像朋友一样,这是从主菜单处理子窗体的典型方式。
答案 1 :(得分:0)
因此,我无法正确确定如何使用UserControls。我把它放在待办事项清单上,以便如果我还有时间的话可以在项目结束时尝试。
但是,我弄清楚了为什么从一个导航转到另一个导航要花这么长时间。
我正在使用的基本表格选择学生详细信息
Student student = new Student();
Student studentDetailsFound = student.GetStudent(2);
我从未阻止过它每次导航到新表单时都从数据库中进行选择,因此每次都延迟两秒钟。 因此,有两种方法可以解决此问题:静态变量或缓存。
我使用了后者,现在它可以相当快地切换到页面。
通过在表单上添加过渡,可以使眼睛更加平滑。
还请注意:如果您像我一样获取数据,则应首先等待表单的设计完成。因此,如果满足以下条件,则将GetStudent部分放入其中:
if (this.Site == null || !this.Site.DesignMode)
{
studentDetailsFound = GetStudent();
}