1

按钮的宽度是 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

4

3 回答 3

2

您的代码测试.Width = 123,然后返回布尔表达式.Width = 233,如果为真或.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
于 2012-09-27T06:54:09.393 回答
2

使用 VB.NEt 的 If() 语句。它被称为“条件运算符”并且存在于多种语言中。IIf 是一个特定于 VB 的函数,具有不同的行为。此处的更多信息: IIf() 和 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
于 2012-09-27T06:55:05.797 回答
1

IIF 是否只返回一个值?

是的。

即如果我想设置按钮的宽度属性,那么我需要使用If 结构吗?

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

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

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

With Me.Button3 
    .Width = If(.Width = 123, 233, 150) 
End With 
于 2012-09-27T07:04:31.283 回答