Sound wird nicht gespielt wenn Label = 5

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von Patrick1993.

    Sound wird nicht gespielt wenn Label = 5

    Hallo Leute,
    Ich habe eine Select Case anweisung in einem meiner Programme damit ich nicht mit 5 Millionen IF-Else Abfragen arbeiten muss.

    Jetzt habe ich vor in einer Case anweisung einen Ton abspielen zu lassen.

    Sie Select Case sieht so aus:

    VB.NET-Quellcode

    1. Select Case status
    2. Case "1"
    3. Label1.Backgroundcolor = Color.Green
    4. 'usw
    5. 'bis hier wo der ton abspielen soll
    6. Case "5"
    7. 'Label bekommt wieder die farbe
    8. My.Computer.Audio.Play(My.Resorces.Blitz, Audioplaymode.Background)


    Doch dort spielt der ton dauernt und hört nicht auf

    Woran kann das liegen ??
    Soll ich den ton lieber von meinem Server laden lassen sprich ihn aus den Resorcen tun und wenn er gebraucht wird Runterladen lassen ?

    Wie oft kommt denn die Case-Abfrage. Ist das im Timer? Dann ist es kein Wunder das dein Ton dauernd abgespielt wird, denn schließlich ist das Label die ganze Zeit über "5" und wird dementsprechend ausgelöst.
    Du kannst davor noch eine Boolean-Abfrage packen sprich:

    VB.NET-Quellcode

    1. If soundplayed = False then
    2. soundplayed = true
    3. My.Computer.Audio.Play(blub, etc)
    4. End If
    Es gibt mehrere Labels für jedes Label gibts eine Sub wo die Case-Abfrage drin ist und die Sub wird dann im Timer geladen und jede Label dementsprechend "beschrieben"

    ok also mal angenommen ich schreibe

    VB.NET-Quellcode

    1. Dim sound As Boolean

    Dann ist dieser (glaube ich) True

    Dann müsste ich diese Boolean ja sogesehen auf die Sounddatei oder auf das Label verweisen oder liege ich dort falsch

    Ich habe den Code in das für die Zahl vorgesehene Case gepackt und der Ton wird gespielt auch wenn das Label nicht 5 ist
    Also Label ist (standardmässig) 2 und der Ton wird dennoch gepielt
    Code der in Case "5" steht:

    VB.NET-Quellcode

    1. 'Nachdem label die farbe bekommen hat
    2. Dim ton As Boolean
    3. If ton = False Then
    4. ton = True
    5. My.Computer.Audio.Play(My.Resources.blitz, AudioPlayMode.Background)
    6. End If

    Ich hatte die in dem Select Case drine.

    Jetzt hab ich die nach ganz oben gepackt. Wenn das Label nun die zahl "5" hat was es auch soll, wird der ton nicht gespielt wenn das aber eine andere zahl hat (standard) 2 dann spielt er den Ton ab ohne probleme

    VB.NET-Quellcode

    1. If ton = true Then
    2. My.Computer.Audio.Play(My.Resources.blitz, AudioPlayMode.Background)
    3. ton = false
    4. End If


    Du musst den Ton immer wenn er nicht spielen soll wieder auf false stellen lassen. Du kannst aber einen eigenen Timer für die Audio deklarieren:

    VB.NET-Quellcode

    1. WithEvents Ton_timer as timer


    In die Timer Sub schreibst du dann

    VB.NET-Quellcode

    1. My.Computer.Audio.Play(My.Resources.blitz, AudioPlayMode.Background)
    2. Application.DoEvents()
    3. Ton_timer.stop()


    Wenn du uns näheres über das Programm sagen könntest, könnte man bessere Lösungen geben.
    Programm A schreibt in Datenbank (eine zahl von 1-0)
    Programm B liest die Datenbank aus und schreibt die Zahlen in ein Label
    Wenn Label die Zahl 5 aus der Datenbank ausliest soll ein Tongespielt werden. Wenn eine andere zahl also nicht die 5 im Label steht soll der Ton nicht gespielt werden.

    Ich will keinen Timer nutzen da die Zahl aus der Datenbank ausgelesen wird (mittels timer)

    Patrick1993 schrieb:

    Programm A schreibt in Datenbank (eine zahl von 1-0)
    Programm B liest die Datenbank aus und schreibt die Zahlen in ein Label
    Wenn Label die Zahl 5 aus der Datenbank ausliest soll ein Tongespielt werden. Wenn eine andere zahl also nicht die 5 im Label steht soll der Ton nicht gespielt werden.

    Patrick1993 schrieb:

    Ich will keinen Timer nutzen da die Zahl aus der Datenbank ausgelesen wird (mittels timer)
    Hallo Patrick,

    ich würde das ein wenig anders lösen. Dann wird das auch definitif funktionieren.


    Ich würde die DB auslesen und erstmals als Array deklarieren:

    Deinen DB auslesen in ein Array, dann

    Dim Status As Boolean = False

    die hier genannten "Zahlen" nimmst du dementsprechend aus dem Array
    Select Case status
    Case "1" : Status = False
    Case "2" : Status = False
    Case "3" : Status = False
    Case "4" : Status = False
    Case "5" : Status = True
    'usw...wenn noch mehr Zahlen kommen

    Select Case True
    Case Status : My.Computer.Audio.Play(My.Resorces.Blitz, Audioplaymode.Background)

    Soetwas solltest du nie über strings lösen, generell über boolische werte
    Dann wird garkein ton abgespielt.

    Vorher wurde der ja abgespielt allerdings nur am anfang sonst nicht.

    *EDIT*
    Boolche werte sind doch von anfang an False

    Was ich gestern vergessen hatt und mir gerade erst eingefallen ist.

    Ich lade die Daten aus der Datebank in einen String und tu diesen dann dementsprechend auslesen in dem Select-Case doch es will und will einfach kein Ton kommen was mir sehr Wichtig were.

    Auf wunsch Poste ich den Code ab dem String wo die Datenbank gespeichert wird

    Boolean ist standardmäßig auf False, und wenn er den Wert am Ende wieder zurücksetzt, kann er sich den langen Code mit unnötigen Abfragen sparen.

    VB.NET-Quellcode

    1. Select Case status
    2. Case "5" : Status = True
    3. End Select
    4. 'abspielen, bla
    5. Status = False 'zurücksetzen


    Hier kann man dann genauso gut ne If-Abfrage nehmen und entsprechend per Case Else oder Else eine Meldung anzeigen, falls du das willst.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Mein Code sieht bisher so aus:

    VB.NET-Quellcode

    1. Public ton As Boolean
    (Ist auf False)

    Hier tu ich den Status aus der DB zwischenlagern:

    VB.NET-Quellcode

    1. Dim status As String = reader("Status")


    Und nun der teil mit den Nummern (Select case)

    VB.NET-Quellcode

    1. Select Case status
    2. Case "1" : ton = false
    3. Label2.BackColor = Color.Blue
    4. Case "2" : ton = false
    5. Label2.BackColor = Color.Green
    6. Case "3" : ton = false
    7. Label2.BackColor = Color.Gold
    8. Case "4" : ton = false
    9. Label2.BackColor = Color.Orange
    10. Case "5" : ton = True
    11. Label2.BackColor = Color.Red
    12. If ton = True Then
    13. My.Computer.Audio.Play(My.Resources.blitz, AudioPlayMode.Background)
    14. End If
    15. Case "6" : ton = false
    16. Label2.BackColor = Color.White
    17. Case "7" : ton = false
    18. Label2.BackColor = Color.AliceBlue
    19. Case "8" : ton = false
    20. Label2.BackColor = Color.Yellow
    21. Case "9" : ton = false
    22. Label2.BackColor = Color.CadetBlue
    23. Case "0" : ton = false
    24. Label2.BackColor = Color.Coral
    25. End Select
    26. ton = false


    doch der ton wird non stop (egal welche zahl) gespielt

    Wie setzt mal solch ein "break" ? Hab ich noch nie was von gehört