出于某种原因,我的选择案例无效。我确定这是愚蠢的。这就是我所拥有的:
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
答案 0 :(得分: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
变量从String
更改为Integer
,因为虚拟键常量(例如VK_A
,VK_B
)是整数。如果您有Option Strict On
,也不会编译。
另请注意,我还将MsgBox
更改为MessageBox.Show
,这是首选。 MsgBox
是一个旧函数,主要用于向后兼容VB6。您会注意到我还将字符串连接运算符从+
更改为&
。来自C#背景,我偏爱使用+
进行连接,我自己。但是,除非Option Strict On
使用+
运算符进行连接,否则可能会造成危险。 &
是安全的,即使你有Option Strict Off
,而且它更具体和自我记录,所以大多数人更喜欢在VB.NET中使用它。
答案 1 :(得分:2)
尝试替换
Return virCommand
带
getVirtualCommand = virCommand
这是函数在Visual Basic中返回值的方式。
答案 2 :(得分: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