VB6默默地从表单中删除大量的控制数据

时间:2009-04-03 03:36:12

标签: vb6 ide corruption frm

我的项目在SSTab(4个选项卡)中可能有130个控件(所有标签,文本框等的总数)。项目加载正常,运行正常,我没有看到任何一点上的单个错误或警告,但是当我保存表单上有SStab时,SStab数据没有保存(它已经完全消失)。通常,.frm文件的相关部分如下所示:

   Begin TabDlg.SSTab SSTab1 
     Height          =   8895
     [1550 more lines of code for all the controls]
     Width           =   540
   End
   Begin VB.Menu FileMenu

但最近它被裁剪成了:

   Begin TabDlg.SSTab SSTab1 
   Begin VB.Menu FileMenu

这非常令人沮丧!在我的VB IDE中,框架,sstab和所有控件都在那里,可编辑,运行/编译正常,任何时候都没有错误消息,但是当你保存文件时,1550行珍贵的sstab数据就会消失 - 再次,没有警告或错误消息。因此,如果退出并重新启动IDE,则会出现表单加载错误,因为现在缺少60%的代码。日志文件指向它找到的第一个错误(在这种情况下是一个没有结束的Begin TabDlg) - 其中没有其他信息。 (日志文件是在删除并保存代码后生成的,因此它没有用处。)

当我第一次发布这个问题时,我认为它与控件的数量有关,因为它在我添加一个控件之后出现,并且在我的前几次测试中,当该控件(或其他控件)出现时似乎消失了删除。现在我似乎无法在任何情况下保存该表格,即使我删除了许多控件(将控件数量远远低于上次稳定时的控件数量)。

我还尝试删除SStab并将所有控件移动到4个不同的帧。我在IDE中成功地做到了这一点,但是当我保存时,大量的数据(从滑块控件开始)丢失了。所以我不知道发生了什么。

这个问题可以在两台不同的PC上重现,因此它似乎不是硬件/损坏的软件VB安装问题。

有没有其他人碰到这样的事情?

6 个答案:

答案 0 :(得分:3)

为每个标签创建一个UserControl。这使得编辑更容易。它还允许您很好地模块化代码,因此每个选项卡都存在于自己的文件中,并且它允许您在其他地方重复使用选项卡。

答案 1 :(得分:2)

听起来很可怕,从来没有听说过这样的事情。

当您在将表单损坏之前将表单加载到IDE中时,您可能没有从VB6获取错误日志文件?日志文件具有与表单文件相同的文件名,但具有.log文件扩展名。例如,如果加载Myform.frm时发生错误,Visual Basic将创建名为Myform.log的日志文件。您可能会在手册中看到的错误消息为documented

有一个look in the Windows Event Log,看看它是否记录了VB6 IDE的任何有趣问题?

你使用任何奇怪的控件吗?也许其中一个人在某种程度上腐蚀了FRM或FRX。 FRM文件只是文字,你很明显知道&该格式记录在VB6手册中。你能在文本编辑器中看到FRM中的任何损坏吗?如果删除FRX中定义的任何属性,它是否仍会失败。

我想我会尝试创建一个新项目和一个新表单,然后使用IDE将所有控件定义复制并粘贴到其中 - 无需代码。使用新表单,看看它是否有同样的问题。也许你可以这样重新创建表单而不会出现问题。如果新表单确实存在问题,请执行相同操作但只占用一半控件。也许你可以通过“二分搜索”找到问题控制。

答案 2 :(得分:2)

当.FRM可写但.FRX是只读的

时尝试保存表单时遇到同样的问题

答案 3 :(得分:1)

不确定这是否是问题,但在VB6表单上,有一个限制为255(或256)命名控件。也许你遇到了这个问题?

解决这个限制的一种方法是使用控制数组。例如,如果您有10个标签,而不是label1,label2,label3等,则可以通过label(9)执行label(0),并且只使用一个命名控件。

另一件值得一提的关于SSTAB的是它显示/隐藏控件的方式。虽然可能看起来控件位于不同的选项卡上,但真正发生的是控件正在向左移动waaaayyyyy(因此在视图之外)。也许有这么多的组件,SSTAB在IDE中扼杀它,因为它试图在设计视图中呈现控件?

同样,不确定这是否是问题,但我知道这两个花絮相对不为人知。

答案 4 :(得分:1)

因此SAVE功能无效。

我怀疑你放在标签条上的一个组件是罪魁祸首。

所以......

1)清点您在表格中放置的每种组件

2)消除一个(种类),保存

3)它保存了吗?

- >是=这是有问题的控制

- >否=返回第2步,但选择另一种

当然,在步骤#2中删除某种控件(例如,所有标签或所有文本框等)非常重要。

但我从未听说过这种情况。

答案 5 :(得分:1)

你并不孤单!我见过这个问题。 。事实上,我现在正在处理它,这就是我带到这个网站的原因。

我从94年开始使用VB(VB3),我在5或6年前第一次看到这个问题,同时使用VB6。然后,我的解决方案与您从上面回复的好人们收到的一些建议没有什么不同:丢弃现有文件并在新文件中重建表单。我做了那件事,受影响的表格一直有效。

我目前的问题出现在另一种更新的形式中,替换/重建选项(大约一个月前执行)仅工作了大约三周。现在问题又回来了,文件的每次新迭代都会很快被破坏。根据上面关于允许控件总数的回复,我正在调查我有多少控件。 。事实上,我正在将主要按钮和菜单整合到控制阵列中,这只是因为它将简化他们的管理。

我还可以确认您对将项目移至第二台PC的观察。 。 。我也这样做了,问题仍然存在。此外,我可以补充一点,我已将项目从一个共享存储系统移动到另一个共享存储系统无济于事。 (原始存储位置位于安装到Win-tel系统的驱动器上,新位置位于基于UNIX的NAS上!)

再次重建文件并检查:Controls.Count = 62,所以我不在前面提到的255控制限制附近。这确实很奇怪! (更不用说了!)