我有一个 UserControl 对象列表;当点击菜单选项转到应用程序的另一个部分时,它会执行以下操作:
- Set the currently displayed usercontrol to visible
- Clear the main panel s Controls list
- New up the requested control (if not already created in the list)
- Add the new control to the main panels Controls list
- Dock the new control to fill
- Set the new control to visible
我这么做是因为之前应用程序的所有区域都不是用户控件,它们只是TabControl中的控件集合。底层代码非常庞大(frmMain中的代码超过13000行)。
它工作得很好。所有控件(之前每个选项卡页可能都有的)都管理自己的行为,每个控件都有着很小的代码占用。我可以拥有一个性感的菜单。一切都很好。
然而,显然存在问题。以前,选项卡控件会在启动时加载,并呈现所有选项卡(但没有被看到)。其中一个标签页上有一个调度控件,需要大约3-4秒钟才能绘制并调整其布局。现在,控件被加载并显示时,它们会根据需要显示,首次查看此特定控件时,您会看到它加载并调整其大小/格式等。这几乎不令人愉悦。
我的问题是,我该如何加载和呈现此控件,以便它能够呈现并找出其布局,但不实际向用户显示?
我试过一些简单的事情,比如:
ScheduleWindow scheduler = new ScheduleWindow() { Visible = false; }
mainPanel.Controls.Add(scheduler);
scheduler.Visible = true;
我尝试了在独立线程上创建和加载控件(遇到了很多困难),但仍然没有任何作用...
有没有办法实现我想要的东西?