错误地使用IIF

时间:2012-09-27 06:51:07

标签: vb.net

按钮的宽度为123.为什么以下不改变宽度

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    With Me.Button3
        IIf(.Width = 123, .Width = 233, .Width = 150)
    End With
End Sub

IIF是否只返回一个值?即如果我想设置按钮的宽度属性,那么我是否需要使用If结构?

MSDN

中很少谈到Iif

3 个答案:

答案 0 :(得分:2)

您的代码测试.Width = 123,如果为true,则返回布尔表达式.Width = 233;如果为false,则返回.Width = 150,然后将结果抛出。这不是你想要的。您有三种选择:

' IIf function - not recommended since it is not typesafe and evaluates all arguments.
.Width = IIf(.Width = 123, 233, 150)

' If operator - typesafe and only evaluates arguments as necessary.
.Width = If(.Width = 123, 233, 150)

' If statement - not an expression.
If .Width = 123 Then .Width = 233 Else .Width = 150

答案 1 :(得分:2)

使用VB.NEt的if() - 语句。它被称为'条件运算符'并以多种语言存在。 IIf是一个特定于VB的函数,具有不同的行为。 更多信息: Performance difference between IIf() and If

在这两种情况下,IIf和If只返回一个值(IIF类型不是键入的;它是一个必须被转换的对象)。无论如何,它似乎做了你想要的事情:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Button3.Width = If(Button3.Width = 123, 233, 150)
End Sub

答案 2 :(得分:1)

  

IIF是否只返回一个值?

  

即如果我想设置按钮的width属性,那么我是否需要使用If结构?

不,因为您可以将返回值分配给Width属性:

With Me.Button3 
    .Width = IIf(.Width = 123, 233, 150) 
End With 

请注意,在当前版本的VB.NET中,应使用If Operator而不是Iif,因为它具有多种优势(类型安全,短路等)。例如,使用If(...)将允许您的代码在没有额外强制转换的情况下进行编译,即使您有Option Strict On(您应该这样做)。

With Me.Button3 
    .Width = If(.Width = 123, 233, 150) 
End With