В чем разница между Form5! ProgressBar.Max и Form5.ProgressBar.Max? - PullRequest
1 голос
/ 28 февраля 2012

Я смотрю на кусок очень старого VB6, и наткнулся на такие случаи, как

Form5!ProgressBar.Max = time_max

и

Form5!ProgressBar.Value = current_time

Просматривая ответ на этот вопрос здесь и читая эту страницу здесь , я заключаю, что эти вещи означают то же, что и

Form5.ProgressBar.Max = time_max
Form5.ProgressBar.Value = current_time

но не совсем понятно, что это так. Может ли кто-нибудь подтвердить или опровергнуть это и / или указать мне объяснение словами одного слога?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Членом формы по умолчанию является (косвенно) коллекция Controls.

Синтаксис bang (!) Используется для доступа к коллекции в VB, и во многих случаях его использует компилятор для раннего связывания вещей, которые в противном случае были бы доступны медленнее при позднем связывании.

Это далеко не устарело, часто предпочтительнее.

Однако в этом случае, поскольку элемент по умолчанию для объектов формы - [_Default] As Object, содержащий ссылку на экземпляр Controls As Object, этот синтаксис не имеет особых преимуществ или недостатков по сравнению с:

Form5("ProgressBar").Value

Я согласен с тем, что в этом случае лучше получить более непосредственный доступ к элементу управления как члену формы, как в:

Form5.ProgressBar.Value

Знание разницы между ними является вопросом фактического знания VB. Тем не менее, это не просто синтаксис, два «пути» делают разные вещи, которые приводят к одному и тому же результату.

Надеюсь, этот ответ предлагает объяснение, а не просто вызов вуду.

1 голос
/ 28 февраля 2012

Да, Form5!ProgressBar почти в точности эквивалентно Form5.ProgressBar

Насколько я помню, есть одно различие: поведение, если объект Form5 не имеет члена ProgressBar (то есть форма не имеет элемента управления с именем ProgressBar). Точечная нотация проверяется во время компиляции, но нотация восклицательного знака проверяется во время выполнения.

  • Form5.ProgressBar не скомпилируется.
  • Form5!ProgressBar скомпилируется, но выдаст ошибку во время выполнения.

ИМХО точечная запись предпочтительнее в VB6, особенно при доступе к элементам управления. Восклицательный знак поддерживается только для обратной совместимости с очень старыми версиями VB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...