Редактор VB6 меняет регистр имен переменных! - PullRequest
33 голосов
/ 30 октября 2008

Я не большой специалист по Visual Basic, но мне поручено поддерживать старое приложение VB6. Каждый раз, когда я извлекаю файл, редактор автоматически заменяет кучу имен переменных в верхнем регистре на строчные. Как я могу сделать эту остановку !? Я не хочу менять их все обратно, и мне больно видеть эти изменения в SourceSafe «Различия», когда я пытаюсь обнаружить НАСТОЯЩИЕ различия.

В определении это тоже меняется автоматически: Dim C as Control становится Dim c as Control. Дим Х & становится Дим Х &. Но это не делает это все время; например, три строки вниз от Dim x &, есть Dim Y &, прописные буквы, которые не изменились. Почему это так со мной?

Ответы [ 10 ]

27 голосов
/ 30 октября 2008

Продолжая с Ответ диджея ...

И это не только изменит регистр переменных в той же области видимости.

Это изменит регистр всех переменных с одинаковыми именами во всем вашем проекте. Таким образом, даже если они объявлены в верхнем регистре в одном месте, другой модуль может иметь разные переменные, использующие одинаковые имена переменных в нижнем регистре, в результате чего все переменные в вашем проекте изменятся на строчные в зависимости от того, какое из объявлений было загружено (?) Последний раз редактировалось.

Таким образом, причина, по которой ваши переменные C и X меняют регистр, в то время как Y - нет, возможно, потому, что C и X объявлены где-то еще в вашем проекте, но в нижнем регистре, а Y - нет.

Есть еще одно упоминание об этом здесь , где они в основном кажутся заинтересованными в таких именах переменных, конфликтующих, когда регистр используется для различения локальных и глобальных переменных. Вместо этого они используют префиксы.

Единственная альтернатива, которую я могу придумать, - это использовать какой-то другой редактор с возможностью подсветки VB6 для редактирования ...

22 голосов
/ 27 января 2016

Поскольку я всегда нахожу эту тему в первую очередь в поисках решения для перепутанного кожуха, вот один Simon D , предложенный в связанном вопросе :

Если вам просто нужно исправить регистр одной переменной (например, вы случайно сделали переменную cOrrectCAse, и теперь они повсюду), вы можете исправить это, добавив

#If False Then
    Dim CorrectCase
#End If

к началу вашего модуля. Если вы сохраните проект и позже удалите оператор, регистр останется верным.

Используя Excel VBA, я часто случайно изменяю все Range.Row на Range.row, небрежно уменьшая значение переменной row внутри некоторой функции - с помощью решения Simon D. я могу исправить это сейчас.

5 голосов
/ 17 февраля 2009

Перечисления еще хуже. Неправильное использование регистра в любом месте использования enum изменяет регистр определения.

4 голосов
/ 30 октября 2008

Чтобы избавиться от болезненной разницы в файлах, установите опцию VSS в диалоге различий, чтобы проводить сравнения без учета регистра. Таким образом, вы увидите только «настоящие» изменения.

0 голосов
/ 11 августа 2018

У меня была похожая проблема перечисления, когда без видимой причины UPPERCASE был изменен на MixedCase.

Enum eRowDepths
    BD = 1
    CF = 1
    Separator = 1
    Header = 3
    subTotal = 2
End Enum

Когда я перешел к следующему (отслеживая последний символ несоответствующих переменных), у меня не было проблем

Enum eRowDepths
    BD = 1
    CF = 1
    SEPARATO = 1
    HEADE = 3
    SUBTOTA = 2
End Enum

Оказывается, это случай, когда хвост виляет собакой. У меня есть следующий код, не самый элегантный, который я допускаю, но, тем не менее, работает (пожалуйста, извините за проблемы форматирования): -

'insert 3 rows iSubTotalPlaceHolder = i<br> rows(ActiveSheet.Range(rangeDMirrorSubTotals).Cells.Count + _ Header _ & ":" _ & ActiveSheet.Range(rangeDMirrorSubTotals).Cells.Count + _ Header + _ subTotal + _ Separator).Insert

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

Это было приемлемо

Dim fred as Integer
fred = SEPARATO + HEADE + SUBTOTA

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

Я надеюсь, что это полезно

0 голосов
/ 15 сентября 2015

Предотвратить автокоррекцию VB6 Для значений enum

Как правило, я объявляю константы в верхнем регистре. Так как перечисления по существу являются константами, мне также нравится объявлять значения для перечислений в UPPERCASE. Я заметил, что VB6 IDE также автоматически их исправляет.

Я обнаружил, что среда IDE не исправляет эти значения при использовании чисел и подчеркивания '_' в именах значений.

Пример:

Public Enum myEnum
  VALUE      'Will be corrected to: Value
  VALUE1     'Will not be corrected
  VALUE_     'Will not be corrected
End Enum   

Я не знаю, работает ли это вообще и распространяется ли это на именование / автоматическое исправление имен переменных.

0 голосов
/ 22 апреля 2012

Закройте все проекты VB, откройте файл формы в текстовом редакторе, измените регистр всех имен, затем заново откройте проект с помощью VB IDE.

0 голосов
/ 18 февраля 2009

В продолжение превосходного ответа Меркатора ...

Я бы порекомендовал:

  1. Проверьте все файлы (я полагаю, вы используете VSS для приложения VB6)
  2. Выполнить перестройку всей группы проектов
  3. Перепроверьте обратно в VSS

Теперь, если исходить из реальных различий, а не «автоматических» изменений, которые VB6 пытался применить.

0 голосов
/ 30 октября 2008

DJ на месте ... VB всегда изменяет регистр переменных в соответствии с исходным объявлением. Это «фича».

0 голосов
/ 30 октября 2008

Он должен быть определен / объявлен в нижнем регистре. Найдите объявление и исправьте его там. Среда IDE всегда меняет регистр в соответствии с объявлением.

...