VB6 тихо удаляет огромные порции контрольных данных из форм - PullRequest
3 голосов
/ 03 апреля 2009

В моем проекте может быть 130 элементов управления (всего ярлыков, текстовых полей и т. Д.) В SSTab (4 вкладки). Проект загружается нормально, он работает нормально, я не вижу ни одной ошибки или предупреждения в любой момент, но когда я сохраняю форму с 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, но когда я сохранил, огромная часть данных (начиная с ползунка) отсутствовала. Так что я понятия не имею, что происходит.

Эта проблема воспроизводится на двух разных компьютерах, поэтому она не является проблемой установки VB оборудования / поврежденного программного обеспечения.

Кто-нибудь еще сталкивался с чем-то подобным?

Ответы [ 6 ]

3 голосов
/ 04 апреля 2009

Создайте UserControl для каждой вкладки. Это делает редактирование намного проще. Это также позволяет вам красиво модульно кодировать, так что каждая вкладка живет в своем собственном файле, и это позволит вам повторно использовать вкладки в другом месте, если хотите.

2 голосов
/ 16 октября 2009

При попытке сохранить форму возникает та же проблема, когда .FRM доступен для записи, но .FRX доступен только для чтения

2 голосов
/ 03 апреля 2009

Звучит ужасно, никогда не слышал ничего подобного.

Предположительно, вы не получаете файл журнала ошибок из VB6 при загрузке формы в IDE до ее повреждения? Файл журнала имеет то же имя файла, что и файл формы, но с расширением .log. Например, если при загрузке Myform.frm произошли ошибки, Visual Basic создаст файл журнала с именем Myform.log. Вы можете увидеть сообщения об ошибках, документировано в руководстве.

Посмотрите в журнале событий Windows , посмотрите, регистрирует ли он какие-либо интересные проблемы с IDE VB6?

Вы используете какие-то странные элементы управления? Возможно, один из них как-то портит FRM или FRX. FRM-файлы - это просто текстовые файлы, как вы, очевидно, знаете, и формат документирован в руководстве VB6. Можете ли вы увидеть какие-либо искажения в FRM в текстовом редакторе? Если вы удалите какие-либо свойства, определенные в FRX, все равно произойдет сбой.

Думаю, я бы попытался создать новый проект и новую форму, а затем использовать IDE, чтобы скопировать и вставить в него все определения элементов управления - без кода. Поиграйте с новой формой, посмотрите, есть ли у нее такая же проблема. Может быть, вы можете воссоздать форму таким образом без проблем. Если новая форма имеет проблему, сделайте то же самое, но возьмите только половину элементов управления. Может быть, вы можете найти решение проблемы с помощью «бинарного поиска».

1 голос
/ 03 августа 2009

Вы не одиноки! Я видел эту проблему. , На самом деле, я имею дело с этим прямо сейчас, что привело меня на этот сайт.

Я работаю с VB с 1994 года (VB3) и впервые увидел эту проблему 5 или 6 лет назад, когда использовал VB6. Мое решение тогда было мало чем отличается от некоторых предложений, которые вы получили от хороших людей, которые ответили выше: выбросьте существующий файл и перестройте форму в новый файл. Я сделал это обратно, и с тех пор эта форма работала.

Моя текущая проблема появляется в другой, гораздо более новой форме, а опция замены / перестроения (выполненная около месяца назад) работала всего около трех недель. Теперь проблема возвращается, и каждая новая итерация файла очень быстро повреждается. Следуя приведенному выше ответу относительно общего количества допустимых элементов управления, я выясняю, сколько элементов управления у меня есть. , и, как это случилось, я был в процессе объединения основных кнопок и меню в управляющие массивы просто потому, что это собиралось упростить их управление.

Я также могу подтвердить ваши наблюдения по поводу переноса проекта на второй компьютер. , , Я тоже это сделал, и проблема остается. Более того, я могу добавить, что я переместил проект из одной системы общего хранения в другую, но безрезультатно. (Исходное хранилище находилось на диске, смонтированном в системе Win-tel, а новое хранилище - на сетевом хранилище UNIX!)

Просто пересоберите файл еще раз и проверьте: Controls.Count = 62, так что я не нахожусь вблизи 255 контрольного предела, упомянутого ранее. Это действительно странно! (Не говоря уже о том, чтобы подняться!)

1 голос
/ 04 апреля 2009

Таким образом, функция SAVE не работает.

Я подозреваю, что один из компонентов, которые вы помещаете на полосу вкладок, является виновником.

Итак ..

1) Проведите инвентаризацию каждого компонента, который вы размещаете в форме

2) устранить один (род), СОХРАНИТЬ

3) Это спасло?

-> Да = это был проблемный элемент управления

-> Нет = вернуться к шагу 2, но выбрать другой вид

Конечно, на шаге 2 важно удалить все элементы управления определенного вида (например, ВСЕ метки или ВСЕ текстовые поля и т. Д.).

Однако я никогда не слышал об этом.

1 голос
/ 03 апреля 2009

Не уверен, что это проблема, но в форме VB6 существует ограничение в 255 (или 256) именованных элементов управления. Возможно, вы сталкиваетесь с этим?

Одним из способов обойти это ограничение является использование контрольных массивов. Например, если у вас было 10 меток вместо label1, label2, label3 и т. Д., Вы можете выполнить label (0) через label (9) и использовать только один именованный элемент управления.

Еще одна вещь, о которой стоит упомянуть в SSTAB, это то, как он показывает / скрывает элементы управления. Хотя может показаться, что элементы управления находятся на отдельных вкладках, на самом деле происходит то, что элементы управления перемещаются waaaayyyyy влево (и, следовательно, вне поля зрения). Возможно, с таким количеством компонентов SSTAB задыхается от этого в IDE, когда пытается отобразить элементы управления в режиме конструктора?

Опять же, я не уверен, что это проблема, но я знаю, что эти два отрывка относительно неизвестны.

...