Problème avec fonction Contains

Résolu
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012 - 21 juil. 2011 à 12:26
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012 - 22 juil. 2011 à 17:55
Bonjour à tous,

Voici mon problème. Je sais que la résolution de celui ci doit être simple, mais rien à faire, ça ne me saute pas au yeux.

J'aimerai que mon application exécute un son spécifique lorsqu'une textbox affiche un chiffre ou un nombre particulier. Malheureusement, ça ne marche pas.

Voici mon code:
If TextBox_skycode.Text.Contains("3" Or "4" Or "17" Or "35" Or "37" Or "38") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Orages.wav", AudioPlayMode.Background)
                Catch ex As Exception
                    'MsgBox(ex.Message)
                End Try
            ElseIf TextBox_skycode.Text.Contains("5" Or "7" Or "8" Or "10" Or "13" Or "14" Or "15" Or "16" Or "41" Or "42" Or "43" Or "46") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Neige.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            ElseIf TextBox_skycode.Text.Contains("36") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Chaleur.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            ElseIf TextBox_skycode.Text.Contains("25") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Froid.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            ElseIf TextBox_skycode.Text.Contains("20" Or "21") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Brouillard.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            ElseIf TextBox_skycode.Text.Contains("6" Or "9" Or "11" Or "12" Or "40" Or "18" Or "45" Or "39") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Pluie.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            ElseIf TextBox_skycode.Text.Contains("23" Or "24") Then
                Try
                    My.Computer.Audio.Play(Application.StartupPath & "\Ressources\Sons\Vent.wav", AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            End If


Si quelqu'un peut m'aider, c'est avec plaisir...

Jules

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
21 juil. 2011 à 13:11
Bonjour,

Il y a IndexOf pour retourner l'index du premier caractère trouvé.
Mais cette fonction est un peu plus lente que Contains (elle recherche l'index exacte contrairement à Contains).

Sinon, au vu général du code, peut être qu'un Dictionnaire (Chaine/Fichier)
Permettrait de réduire ce IF en une simple boucle For Each.

Dim MonDictionnaire as Dictionnary(Of String, String)

For Each lItem As KeyValuePair(Of String, String) In MonDictionnaire
    If TextBox_skycode.Text.Contains(lItem.Key) Then
        My.Computer.Audio.Play(Application.StartupPath & lItem.Value, AudioPlayMode.Background)
    End If
Next


Mon site
3
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
21 juil. 2011 à 13:21
Bonjour,

l'utilisation d'un Select Case me semblerait plus qu'approprié dans ce cas là :
Dim value As Integer
If Not Integer.TryParse(TextBox_skycode.Text, value) Then
    ' Saisie invalide
    Return
End If
' À partir d'ici value contient la valeur du texte sous forme numérique
Dim path As String = Application.StartupPath & "\Ressources\Sons"
Select Case value
    Case 3, 4, 17, 35, 37, 38
        path &= "Orages.wav"
    Case 5, 7, 8, 10, 13 To 16, 41 To 43, 46
        path &= "Neige.wav"
    Case 36
        path &= "Chaleur.wav"
    Case 25
        path &= "Froid.wav"
    Case 20, 21
        path &= "Brouillard.wav"
    Case 6, 9, 11, 12, 18, 39, 40, 45
        path &= "Pluie.wav"
    Case 23, 24
        path &= "Vent.wav"
    Case Else
        ' Saisie inconnue
        Return
End Select

Try
    My.Computer.Audio.Play(path, AudioPlayMode.Background)
Catch ex As Exception
    Debug.WriteLine(ex.Message)
End Try


Notons tout de même qu'ici c'est une approche basique du problème, dans l'idéal il faudrait une méthode qui valide l'entrée saisie dans la TextBox, une fois cette entrée validée elle passe cette valeur à une méthode qui renvoie le chemin du fichier son ("idéalement", il serait mieux de renvoyer une valeur d'Enum qui ensuite servirait à construire ce chemin, en utilisant Path.Combine par exemple plutôt que des concaténations) et enfin ce chemin serait utilisé pour lire le son (enfin quelque chose dans ce goût là pour moi).

Cordialement !
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juil. 2011 à 12:56
Bonjour,
je crois savoir que la fonction contains retourne un booléen.
Il te faut donc l'utiliser avec, tour à tour, chacune de tes valeurs et quitter dès qu'une valeur comparée retourne True

Es-tu certain de ce que n'existe pas du "plus mieux" que cette fonction, sous VB.Net, pour ce que tu veux faire ? l'équivalent de instr sous VB6, par exemple, du genre ('sous VB6)
If Instr(lachaine, x) + instr(lachaine, y) + ..... > 0 Then
ou encore utiliser une regexp ?

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juil. 2011 à 13:30
sauf que toi, Sehnsucht, tu considères la valeur dans sa totalité alors que le demandeur veut savoir si elle est présente dans une chaîne

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
21 juil. 2011 à 18:54
Euh oui, c'est mon interprétation de la question de l'OP
lorsqu'une textbox affiche un chiffre ou un nombre particulier

sinon je comprends pas spécialement l'intérêt de tester dans la même condition si la TextBox contient 3 ou 35 vu que pour avoir 35 il faut forcément avoir 3.
Après j'ai pu me planter sur l'idée aussi
À voir, donc après complément d'informations ^^
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
22 juil. 2011 à 17:55
J'ai utilisé la méthode de Sehnsucht et elle marche parfaitement. ;)
Je vais continué à la tester cependant, pour être bien sur que l'application réagit correctement en toute circonstances ;)

Je testerai plus en détail les autres méthodes et à tête reposé.

Merci à vous tous pour votre aide,
c'est un véritable plaisir d'obtenir de l'aide sur ce forum.

Jules
0
Rejoignez-nous