PDA

View Full Version : [VB .NET] problema Select Case


deviato
14-03-2010, 12:34
Salve ho un problema, è possibile usare il Select Case per fare il confronto con Stringhe?
Vi posto il codice che ho scritto:

Select Case ComboBox2.Text
Case "Facile" Or "Intermedio" Or "Difficile"
Button1.Enabled = True
Button3.Enabled = False
level = ComboBox2.Text
Case "Personalizzato"
Button3.Enabled = True
Button1.Enabled = False
End Select

Mi da l'errore "Eccezione first-chance di tipo 'System.InvalidCastException' in Microsoft.VisualBasic.dll"

Volevo sapere se c'è qualche errore di sintassi che non riesco a capire cosa sbaglio. Forse si può solo usare per valori numerici? :muro:

MarcoGG
14-03-2010, 13:55
No, può essere usato benissimo con stringhe e quant'altro, ma rispettando la giusta sintassi. Se metti Or in quel modo VB interpreta un caso multiplo con valori numerici. In una Select Case un Case multiplo con stringhe si definisce separando con la virgola. Inoltre è sempre consigliabile prevedere alla fine il caso alternativo a tutti i precedenti :

Select Case ComboBox2.Text

Case "Facile", "Intermedio", "Difficile"
'...
MsgBox("1")

Case "Personalizzato"
'...
MsgBox("2")

Case Else
'...
MsgBox("Else")

End Select
;)

deviato
14-03-2010, 22:48
Quindi non c'è modo di scegliere un operatore logico per il case se uso stringhe? comunque domani provo a fare le modifiche.
Grazie ancora! :D

MarcoGG
15-03-2010, 21:04
Quindi non c'è modo di scegliere un operatore logico per il case se uso stringhe?

Ma in questo caso la virgola funge proprio da "operatore logico". E' una questione di sintassi, e un modo per raggruppare più casi in un unico caso multiplo. Inoltre, se ci pensi, non è che usare AND, OR, XOR ecc. in una Select Case abbia poi molto senso.

Pensiamo ad un caso numerico. ComboBox con valori da 1 a 9.
> Voglio 3 casi :
1. Da 1 a 3
2. Da 4 a 6
3. Da 7 a 9

Select Case ComboBox1.Text

Case 1 To 3
'...
MsgBox("basso")

Case 4 To 6
'...
MsgBox("medio")

Case Else
'...
MsgBox("alto")

End Select

e nessun bisogno di usare operatori logici. ;)
In ogni caso una sintassi tipo "Case Is >=4 And <=6" non è ammessa.