(请教???)一个vb小问题

时间:2023-01-31 18:37:13
vb编码中用elseif语句有什么不好?
另外,一个这样的语句结构:
    if...
    elseif...
    elseif...
    elseif...
    else...
    end if
 用if...else...end if结构怎么替代它?

8 个解决方案

#1


你还不如用select 。。。case。。。 end select来代替

#2


可是我要判断的不单单是一个变量的条件

#3


Dim a As Integer, b As Integer
a = 40
If a <= 10 Then
  b = 1
  ElseIf a > 10 And a <= 20 Then b = 2
  ElseIf a > 20 And a <= 30 Then b = 3
  ElseIf a > 30 And a <= 40 Then b = 4
  Else
    b = 5
End If
Text1.Text = b & "+"
If a <= 10 Then
  b = 1
  Else
    If a > 10 And a <= 20 Then
        b = 2
      Else
        If a > 20 And a <= 30 Then
            b = 3
          Else
            If a > 30 And a <= 40 Then
                b = 4
              Else
                b = 5
            End If
        End If
    End If
End If
Text1.Text = Text1.Text & b

#4


那就AND呀

#5


If...Then...Else 语句  语言参考 
版本 3.0 
 



--------------------------------------------------------------------------------

描述
根据表达式的值有条件地执行一组语句。
语法
If condition Then statements [Else elsestatements ] 
或者,使用块形式的语法: 

If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If 

If...Then...Else 语句的语法包含以下部分:

部分 描述 
condition 一个或多个下面两种类型的表达式:
数值或字符串表达式,其运算结果是 True 或 False。如果 condition 是 Null,则 condition 被视为 False。

形如 TypeOf objectname Is objecttype 的表达式。objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True;否则为 False。
 
statements 如果 condition 为 True 时,执行的一条或多条(以冒号分开)语句。 
condition-n 同 condition。 
elseifstatements 如果相关的 condition-n 为 Ture时,执行的一条或多条语句。 
elsestatements 如果前面没有 condition 或 condition-n 表达式为 True 时,执行的一条或多条语句。 


说明
对于短小简单的测试,可以使用单行形式(第一种语法)。但块形式(第二种语法)提供了比单行形式更强的结构化与适应性,比较容易阅读、维护及调试。 
--------------------------------------------------------------------------------
 
注意 在单行语法中,可以执行多条语句作为 If...Then 判断的结果,但所有语句必须在同一行上并且以冒号分开,如下列语句所示: 
If A > 10 Then A = A + 1 : B = B + A : C = C + B

 

--------------------------------------------------------------------------------
 
当程序运行到 If 块(第二种语法)时,将测试 condition。如果 condition 是 True,则执行 Then 之后的语句。如 condition 是 False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。当找到某个为 True 的条件时,则其相关的 Then 之后的语句会被执行。如没有一个 ElseIf 语句是 True(或没有 ElseIf 子句),则将执行 Else 之后的语句。执行 Then 或 Else 之后的语句以后,将继续执行 End If 之后的语句。
Else 和 ElseIf 子句都是可选的。在 If 块中可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块语句可以被嵌套,即被包含在另一个 If 块语句之中。

要判断某个语句是否是一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 的同一行之后还有其他非注释的内容,则此语句就是单行形式的 If 语句。

If 块语句必须是某一行的第一条语句,并且必须以 End If 语句结束。

#6


那就要用if endif 嵌套了
比如
If a = 2 Then
ElseIf b = 3 Then
ElseIf c = 4 Then
End If
转化成为:
If a = 2 Then
Else
  If b = 3 Then
   
  Else
    If c = 4 Then
    End If
  End If
End If
我自己还有一个想法,如果几个不同的条件,我想你可以经过某个算法结合到一起然后在用select case
用一堆if 实在容易晕,比如上边的可以这样转化
e = IIf(a = 2, 1, 0) * 100 + IIf(b = 3, 1, 0) * 10 + IIf(c = 4, 1, 0)
Select Case e
Case 111
Case 11
Case 1
Case 101
End Select
(没有经过认真思考,所以可能上面代码逻辑未必正确),我只是用它表达我的一种想法

#7


还是用if endif 嵌套吧

#8


谢谢各位

#1


你还不如用select 。。。case。。。 end select来代替

#2


可是我要判断的不单单是一个变量的条件

#3


Dim a As Integer, b As Integer
a = 40
If a <= 10 Then
  b = 1
  ElseIf a > 10 And a <= 20 Then b = 2
  ElseIf a > 20 And a <= 30 Then b = 3
  ElseIf a > 30 And a <= 40 Then b = 4
  Else
    b = 5
End If
Text1.Text = b & "+"
If a <= 10 Then
  b = 1
  Else
    If a > 10 And a <= 20 Then
        b = 2
      Else
        If a > 20 And a <= 30 Then
            b = 3
          Else
            If a > 30 And a <= 40 Then
                b = 4
              Else
                b = 5
            End If
        End If
    End If
End If
Text1.Text = Text1.Text & b

#4


那就AND呀

#5


If...Then...Else 语句  语言参考 
版本 3.0 
 



--------------------------------------------------------------------------------

描述
根据表达式的值有条件地执行一组语句。
语法
If condition Then statements [Else elsestatements ] 
或者,使用块形式的语法: 

If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If 

If...Then...Else 语句的语法包含以下部分:

部分 描述 
condition 一个或多个下面两种类型的表达式:
数值或字符串表达式,其运算结果是 True 或 False。如果 condition 是 Null,则 condition 被视为 False。

形如 TypeOf objectname Is objecttype 的表达式。objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True;否则为 False。
 
statements 如果 condition 为 True 时,执行的一条或多条(以冒号分开)语句。 
condition-n 同 condition。 
elseifstatements 如果相关的 condition-n 为 Ture时,执行的一条或多条语句。 
elsestatements 如果前面没有 condition 或 condition-n 表达式为 True 时,执行的一条或多条语句。 


说明
对于短小简单的测试,可以使用单行形式(第一种语法)。但块形式(第二种语法)提供了比单行形式更强的结构化与适应性,比较容易阅读、维护及调试。 
--------------------------------------------------------------------------------
 
注意 在单行语法中,可以执行多条语句作为 If...Then 判断的结果,但所有语句必须在同一行上并且以冒号分开,如下列语句所示: 
If A > 10 Then A = A + 1 : B = B + A : C = C + B

 

--------------------------------------------------------------------------------
 
当程序运行到 If 块(第二种语法)时,将测试 condition。如果 condition 是 True,则执行 Then 之后的语句。如 condition 是 False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。当找到某个为 True 的条件时,则其相关的 Then 之后的语句会被执行。如没有一个 ElseIf 语句是 True(或没有 ElseIf 子句),则将执行 Else 之后的语句。执行 Then 或 Else 之后的语句以后,将继续执行 End If 之后的语句。
Else 和 ElseIf 子句都是可选的。在 If 块中可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块语句可以被嵌套,即被包含在另一个 If 块语句之中。

要判断某个语句是否是一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 的同一行之后还有其他非注释的内容,则此语句就是单行形式的 If 语句。

If 块语句必须是某一行的第一条语句,并且必须以 End If 语句结束。

#6


那就要用if endif 嵌套了
比如
If a = 2 Then
ElseIf b = 3 Then
ElseIf c = 4 Then
End If
转化成为:
If a = 2 Then
Else
  If b = 3 Then
   
  Else
    If c = 4 Then
    End If
  End If
End If
我自己还有一个想法,如果几个不同的条件,我想你可以经过某个算法结合到一起然后在用select case
用一堆if 实在容易晕,比如上边的可以这样转化
e = IIf(a = 2, 1, 0) * 100 + IIf(b = 3, 1, 0) * 10 + IIf(c = 4, 1, 0)
Select Case e
Case 111
Case 11
Case 1
Case 101
End Select
(没有经过认真思考,所以可能上面代码逻辑未必正确),我只是用它表达我的一种想法

#7


还是用if endif 嵌套吧

#8


谢谢各位