我正在看一块非常古老的VB6,并且遇到了诸如
之类的用法Form5!ProgressBar.Max = time_max
和
Form5!ProgressBar.Value = current_time
仔细阅读此问题的答案here并阅读此页面here,我推断这些事情与
相同Form5.ProgressBar.Max = time_max
Form5.ProgressBar.Value = current_time
但事实并非如此。任何人都可以确认或否认这一点,并且/或者用一个音节的单词指出我的解释吗?
答案 0 :(得分:1)
是的,Form5!ProgressBar
几乎完全等同于Form5.ProgressBar
据我所知,存在一个区别:Form5
对象没有ProgressBar
成员的行为(即表单没有名为ProgressBar的控件)。在编译时检查点表示法,但在运行时检查感叹号表示法。
Form5.ProgressBar
将无法编译。Form5!ProgressBar
将编译但在运行时会出错。 恕我直言,VB6中首选点符号,尤其是在访问控件时。仅支持感叹号以便与非常旧版本的VB向后兼容。
答案 1 :(得分:1)
Form的默认成员是(间接)Controls集合。
bang(!)语法用于VB中的集合访问,在许多情况下,编译器利用它来提前绑定事物,否则通过后期绑定会更慢地访问它们。
远非弃用,通常更可取。
但是在这种情况下,由于Form对象的默认成员是[_Default] As Object
,其中包含对Controls As Object
实例的引用,因此这种语法没有特别的优点或缺点:
Form5("ProgressBar").Value
我同意在这种情况下,最好更直接地将控件作为Form的成员访问,如下所示:
Form5.ProgressBar.Value
了解它们之间的区别是实际上知道 VB的问题。它不仅仅是语法,两个“路径”做不同的事情,得到相同的结果。
希望这个答案提供一个解释,而不仅仅是调用伏都教。