让我们从坦白开始:我来自VB6背景,我习惯于在表单上的对象事件中进行编码,因此我的事件代码在某种程度上随机结束在代码窗口中排序。有了这个习惯,记住控件的名称从未如此重要(虽然我很好地命名)...我只是双击设计视图中的一个按钮,这让我直接找到了代码。控制的主要事件。如果我忘记了控件的名称,我会单击它并查看属性。这不是我已经离开的习惯。
嗯,现在这是追赶我的。使用VS Express 2013,我有一个包含大量容器的表单 - 容器内,标签,按钮和其他doohickeys。我从VS.NET Express 2008移植了我的代码,这不是一个问题。但现在,在我可以查看其属性之前,在设计视图中选择任何控件的操作大约需要10秒。如果我拖动以调整控件的大小,另一个10秒后我可以选择另一个控件。这使得设计这种形式几乎是不切实际的。
在这个特定的项目中,我使用了一个标签控件(用户永远不会看到它)来设计很多屏幕"每个都包含充满控件的面板。每个"屏幕的面板"被移出选项卡并按照用户更改屏幕的请求停靠到主窗体中。 (我使用术语"屏幕"表示一个充满控件的窗口,通常最大化。)
在同一个项目中,简单的模态密码更改表单在视觉上编辑控件的速度并不慢,即使复杂的表单在IDE中仍然可见。
我的问题分为三部分:
首先 ,花费所有时间做什么呢?
第二 ,是否有可以调整以提高速度的设置?
第三 ,我应该放弃尝试按原样加速,并移动每个"屏幕"为了设计目的,为了避免这种缓慢而进入自己的形式? (现在要做很多工作......见下一段。)
到目前为止,我已经避免了分离"屏幕"因为我不希望在用户更换屏幕时出现新窗口,并且因为一个屏幕中控件的代码可能会影响其他屏幕上控件的属性...在这种情况下我不想写出来
form.doohickey.text =" blah"
..而是保持... ...
doohickey.text =" blah"
我使用VB但我不认为这个问题是特定于VB的。)
答案 0 :(得分:1)
首先,我感受到你的痛苦。我有一个应用程序的管理部分,我正在编写,我也使用TabControl。到目前为止我有10个标签,我只添加了大约4-5个标签的控件。我刚刚添加了我拥有的控件,到目前为止在这一个表单上有大约360个控件,设计器文件长约3300行。目前,每当我更改其中一个控件的属性值或者去保存Designer时,每次大约需要3-4秒。我有一台相当不错的机器; i5-3320M,8GB内存,英特尔330 SSD,它还需要一点时间才能在tabControl中做一些事情。它还需要FOREVER在该表单上打开并加载设计器......
我发现更容易打开Visual Studio的新实例,创建测试应用程序,添加具有相同属性的TabControl,并从那里设计新的标签页。当我完成后,我会复制粘贴到我的实际项目中。除了我在主应用程序项目中编写的少数自定义控件之外,这种方法很有效,我只需要坐下来等待添加它们。
答案 1 :(得分:0)
我现在正在回答我自己的问题。这是我最终使用的方法,它有很多帮助......
我的总体目标是拥有一个没有很多窗口的界面,但仍然提供了许多不同的“屏幕”。
我曾经将不同“屏幕”的所有不同控件放在不同的面板上,每个面板都包含在一个看不见的TabControl的单独标签中。然后我会根据需要将这些面板移动到我的主窗体,根据需要更改每个面板的Parent属性。唯一的问题是Winforms设计器变得非常慢,因为表单上的控件数量增加到数百个。
现在,我现在将每个“屏幕”设计为一个单独的表单,每个表单都包含一个Dock属性= Fill的面板。这样的面板包含表单上的所有其他内容。表单本身永远不可见。
根据需要查看各种屏幕,我执行:
ScreenForm.Panel1.Parent = Mainform
......或者,取决于我如何摆出来......
ScreenForm.Panel1.Parent = Mainform.PanelXYZ
...我也可以卸载或隐藏面板新容器中已存在的任何面板。
我很惊讶地发现面板中包含的控件的各种事件的代码仍然会运行,因为这样的代码存在于第一个表单的文件中,而不是显示的表单文件中。幸运的是,我似乎错了。事件代码遵循控件本身。我不仅可以复制/粘贴控件,还可以将相应的事件代码复制/粘贴到新表单中,以便于开发和更快的Winforms设计器。
所有这些都类似于具有最大化窗口的MDI界面,但没有显示标题栏或[X]。
基本上我正在做我以前做过的所有事情,除了使用带面板的单独表格而不是带面板的单独标签。 WinForms设计器更快,因为任何形式的控件都不多。
答案 2 :(得分:0)
我想我在一个人口过多的容器/项目上更改控件的名称时,意外地找到了一个节省大量时间的解决方法。在更改名称之前,切换False / True"生成成员"您要重命名的控件的属性(我相信您也可以在" Name"属性下找到它)。这样可以为过程添加更多点击次数,但可以节省大量时间。我尚未完成的项目有超过4000个控件和多种形式,其中一些是非常重的" (10 - 20秒通常更改控件的名称)。当然,对于项目的加载时间(对我来说大约35秒),这无论如何都没有帮助,但我可以忍受它。如果这对您有用,请告诉我。