Problème avec fonction Contains [Résolu]

Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
- - Dernière réponse : julien2424
Messages postés
76
Date d'inscription
mardi 8 août 2006
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
14356
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 janvier 2019
365
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Dernière intervention
4 mai 2013
3
Merci
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 !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Sehnsucht
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
259
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
259
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Dernière intervention
4 mai 2013
0
Merci
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 ^^
Commenter la réponse de Sehnsucht
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.