2016-08-12 129 views
0

我正在处理VB6应用程序中的表单。我有一个问题,如果有人可以帮助。VB中的布尔函数

如果我创建这样的功能...

Public Function CheckUser(userID as integer) as boolean 
CheckUser = False 
'do stuff here 

CheckUser = True 
Exit Function 

我从另一个程序在调用这个函数(相同的形式) - 我可以在整个形式Checkuser布尔值,或仅是为这个程序?基本上我试图在运行这个函数后返回一个布尔值回到我的过程 - 并且不真的想声明一个新的模块化变量并且这样。试图保持整洁。

+1

是的。只要你以相同的形式调用它,它就会按原样工作。 – cyboashu

+0

我怀疑这不是你要求的。不,它不会在超空间中创建一些神奇的CheckUser变量。正如你写的那样,你必须在每次你想要这个值的时候调用它。这强烈地感受到VBA问题,而不是VB6程序员甚至会问的东西。 – Bob77

+0

@ Bob77只是问。不需要粗鲁。 – BobSki

回答

1

是的,你可以,如果你声明CheckUser作为一个全球性,否则这是不可能的,因为在本地方法.. 这将帮助你如何声明全局变量。 how to declare global variable

+0

好的,谢谢,我想知道,因为这是一个公共职能。谢谢 – BobSki

+1

你可以拥有一个USER_ID格式的属性,当设置它时可以设置public/global var,CheckUser –

1

这是范围一个问题:

https://support.microsoft.com/en-ca/kb/141693

的一般规则是一个变量是只在范围为在其被声明的结构的后代成员。如果你在函数中声明一个变量,就像这里通过VB的隐式函数变量所发生的那样,那个变量只存在于该函数中。

访问修饰符是公开的事实与它无关。您可以在此处详细了解访问修饰符:

What is the difference between Dim, Global, Public, and Private as Modular Field Access Modifiers?

1

首先。 VB6是承载VBA语言的表单包和应用程序对象(以及打印机和剪贴板对象)。

在编程中有函数(以及对象的方法和属性也是函数)和变量。

在您的代码中继续使用它,您将不得不在每次使用时都去If CheckUser("12345") then

但函数调用很慢。参数必须放在堆栈上,堆栈上创建的局部变量,放在堆栈上的返回地址,然后调用可能不在CPU高速缓存中的内存位置。

因此,如果多次使用某个东西将其存储在一个变量中。

Dim GetCurrentUser As Boolean 
GetCurrentUser=CheckUser("12345") 

通过将Dim在模块的顶部是可用于该模块中的所有过程。或通过Public GetCurrentUser As Boolean访问所有程序。

+0

与使用全局引用的附加维护问题相比,性能差异可以忽略不计。当您最小化“副作用”代码并保持您的代码独立时,维护代码会更好。我并不是说永远不会使用全局变量,但在大多数情况下,函数调用的可维护性要好得多。 –