0

出于某种原因,我的选择案例不起作用。我敢肯定这很愚蠢。这是我所拥有的:

Private Function getVirtualCommand(ByVal command As String)
    Dim virCommand As String

    Select Case virCommand
        Case command = "A"
            virCommand = VK_A
        Case command = "B"
            virCommand = VK_B
        Case command = "C"
            virCommand = VK_C
        Case Else
            MsgBox("The key command " + command + " is not listed. getVirtualCommand()", MsgBoxStyle.OkOnly, "Error")
    End Select

    Return virCommand
End Function
4

3 回答 3

4

您正在使用Select Case来检查virCommand变量的值。 virCommand将永远是Nothing,因为它刚刚被声明并且尚未设置为值。相反,您需要检查command参数的值。此外,您不需要在每个Case语句中重新声明变量名称。您只需要说明该值,例如:

Private Function getVirtualCommand(ByVal command As String) As Integer
    Dim virCommand As Integer

    Select Case command
        Case "A"
            virCommand = VK_A
        Case "B"
            virCommand = VK_B
        Case "C"
            virCommand = VK_C
        Case Else
            MessageBox.Show("The key command " & command & " is not listed. getVirtualCommand()", "Error")
    End Select

    Return virCommand
End Function

请注意,我添加了一个As Integer来指定函数的返回类型。当您不指定返回值时,它假定返回类型为Object. 最好指定一个更具体的类型,以便调用函数的人知道会发生什么。如果你有,这将不会编译Option Strict On,我会推荐。

我还将virCommand变量从 a更改String为a Integer,因为虚拟键常量(例如VK_AVK_B)是整数。如果你有,这也不会编译Option Strict On

另请注意,我也更改MsgBoxMessageBox.Show,这是首选。 MsgBox是一个旧函数,主要是为了向后兼容 VB6。您会注意到我还将字符串连接运算符从 更改+&。来自 C# 背景,我+自己偏爱使用连接。但是,除非您Option Strict On使用+运算符进行连接可能很危险。是安全的&,即使你有Option Strict Off,而且它更具体和自我记录,所以大多数人更喜欢在 VB.NET 中使用它。

于 2013-07-29T19:04:16.767 回答
2

尝试更换

Return virCommand

getVirtualCommand = virCommand

这就是 Visual Basic 中函数返回值的方式。

更多信息在[vbscript] How to return value from a function中。

于 2013-07-29T18:57:47.563 回答
1

很简单,你需要检查你的参数命令:

Private Function getVirtualCommand(ByVal command As String) as Integer
    Dim virCommand as Integer
   Select Case command 
        Case "A"
            virCommand = VK_A
        Case "B"
            virCommand = VK_B
        Case "C"
            virCommand = VK_C
        Case Else
            MsgBox("The key command " + command + " is not listed. getVirtualCommand()", MsgBoxStyle.OkOnly, "Error")
    End Select

    Return virCommand
End Function
于 2013-07-29T18:54:56.673 回答