有人可以帮助我理解为什么If / Then / End If有效但IIf没有?
我用这个运行我的代码,它按预期工作:
For Each BtnObj In Padre.Controls
With BtnObj
If nullinator(.Tag) = 0 Then
.Visible = False
Else
.Visible = True
End If
End With
Next
这是我的“nullinator”函数:
Public Shared Function nullinator(ByVal CheckVal As String) As Integer
' Receives a string and returns an integer (zero if Null or Empty or original value)
If String.IsNullOrEmpty(CheckVal) Then
Return 0
Else
Return CheckVal
End If
End Function
但是,如果我使用此代码运行它,即使Tag属性的内容为空,nullinator(.Tag)= 0也始终等于False。这是代码:
For Each BtnObj In Padre.Controls
With BtnObj
IIf(nullinator(.Tag) = 0, .Visible = False, .Visible = True)
End With
Next
哦,是的,“Padre”变量是容器(父)对象。
为什么我没有成功使用IIf的任何见解将不胜感激!
答案 0 :(得分:2)
IIf
返回一个值:
.Visible = IIf(nullinator(.Tag) = 0, False, True)
返回两个对象中的一个,具体取决于表达式的评估。
https://msdn.microsoft.com/en-us/library/27ydhh0d(v=vs.90).aspx
为什么返回Object并将其作为参数,而不是任何其他数据类型:
(对象)保存引用对象的32位(4字节)地址。您可以将任何引用类型(字符串,数组,类或接口)分配给Object变量。 Object变量还可以引用任何值类型的数据(数字,布尔值,字符,日期,结构或枚举)。 (强调我自己)
通过允许函数采用任何值类型,不需要函数重载。
https://msdn.microsoft.com/en-us/library/twcxd6b8(v=vs.90).aspx
答案 1 :(得分:0)
...因为您认为的任务实际上是比较。
IIF
函数返回一个值。因此,它将返回.Visible = False
或.Visible = True
的结果。
要使其有效,您可能希望删除比较并返回True
或False
。