【发布时间】:2010-04-20 18:32:16
【问题描述】:
对于我的几种表单,我偶尔会遇到以下问题:我使用设计器(Visual Studio 2008、Windows Forms、.NET 2.0、VB.NET)编辑表单以添加组件,后来才发现进行了一些小的调整(例如,表单的大小突然改变了几个像素),并且控件被删除。这会默默地发生——事件处理方法也会自动删除它们的Handles 后缀,因此它们永远不会被调用,也不会出现编译器错误。我只是在很久以后才注意到或根本没有注意到,因为我正在处理表单中的不同区域。
例如,我有一个带有 SplitContainer 的表单,左侧包含 Infragistics UltraListView,右侧包含 UltraTabControl。我添加了一个新选项卡和其中的控件,它们运行良好。后来我发现列表视图的滚动条突然不可见,因为它的大小被关闭了,并且至少有一个控件从我没有处理的不同选项卡中删除。
这是 WinForms Designer 还是 Infragistics 的已知问题?当然,我使用版本控制,因此我可以比较更改并将已删除的代码重新合并,但这是一个乏味的过程,不应该是必要的。有没有办法避免这种情况?发生这种情况有充分的理由吗?
一个线索是,被删除的控件可能具有期望在运行时而不是设计时运行的代码(例如Load 事件处理程序),并且可能会引发异常。这会导致 Visual Studio 删除控件吗?
【问题讨论】:
-
我很久以前就看到过这种情况,如果我不让 Visual Studio 完全渲染表单,它会丢弃一些控件。这可能是 Visual Studio 的最早版本。
-
你的最后一段很有趣。在创建代码时,控件的关联设计器可能会发生异常(设计器本身不会这样做),这可能会中断代码生成过程。因此,罪魁祸首可能是控件设计器在消失的控件之前。我以前在VS中遇到过这个问题,但找不到解释。
-
我不认为事件处理程序中只有运行时代码可能是原因,我接手的一个以前的项目在负载处理程序中充斥着数据库读取,直到我把它放了很多“ If not DesignMode Then" 当我在设计器中打开它们时,它一直有问题,但我注意到它从未丢失任何控件。
-
我只记得当我将控件添加到表单但后来破坏它们以使其无法构建时,自定义控件发生了这种情况,当我修复它们时,它们'从表格中消失了。不过,我从来没有能够始终如一地重现这一点,所以我不能肯定这不是我做错了什么导致了这种情况发生。
-
Infragistics 控件的代码是否生成到同一个设计器文件中?我无法想象 winform 的团队在生成程序代码以及考虑其他与该代码混淆的所有场景方面所面临的挑战。这可能是引入像 XAML 这样更具声明性的东西的一半原因。我总是遇到数据集设计器遇到类似问题的问题,即通过设计器进行的更改会消失,或者数据集设计会看似随意地完全破坏,必须删除并重新创建。
标签: .net vb.net winforms visual-studio-2008 windows-forms-designer